Staging
v0.5.1
https://github.com/python/cpython
Revision 5baf4bc97863dc2a5e89ca22ac73bdbf34dff925 authored by Guido van Rossum on 29 December 1997, 20:05:45 UTC, committed by Guido van Rossum on 29 December 1997, 20:05:45 UTC
input.  When an EOF is read, break out of the loop instead of (by
default) writing an empty line (which doesn't do much good).  Don't
close self when falling through the loop.
1 parent 588f38e
Raw File
Tip revision: 5baf4bc97863dc2a5e89ca22ac73bdbf34dff925 authored by Guido van Rossum on 29 December 1997, 20:05:45 UTC
Moved things around a bit in interact(), so outout is processed before
Tip revision: 5baf4bc
tzparse.py
# Parse a timezone specification.
# XXX Unfinished.
# XXX Only the typical form "XXXhhYYY;ddd/hh,ddd/hh" is currently supported.

tzpat = ('^([A-Z][A-Z][A-Z])([-+]?[0-9]+)([A-Z][A-Z][A-Z]);'
	  '([0-9]+)/([0-9]+),([0-9]+)/([0-9]+)$')

tzprog = None

def tzparse(tzstr):
	global tzprog
	if tzprog == None:
		import re
		tzprog = re.compile(tzpat)
	match = tzprog.match(tzstr)
	if not match:
		raise ValueError, 'not the TZ syntax I understand'
	subs = []
	for i in range(1, 8):
		subs.append(match.group(i))
	for i in (1, 3, 4, 5, 6):
		subs[i] = eval(subs[i])
	[tzname, delta, dstname, daystart, hourstart, dayend, hourend] = subs
	return (tzname, delta, dstname, daystart, hourstart, dayend, hourend)

def tzlocaltime(secs, params):
	import time
	(tzname, delta, dstname, daystart, hourstart, dayend, hourend) = params
	year, month, days, hours, mins, secs, yday, wday, isdst = \
		time.gmtime(secs - delta*3600)
	if (daystart, hourstart) <= (yday+1, hours) < (dayend, hourend):
		tzname = dstname
		hours = hours + 1
	return year, month, days, hours, mins, secs, yday, wday, tzname

def tzset():
	global tzparams, timezone, altzone, daylight, tzname
	import os
	tzstr = os.environ['TZ']
	tzparams = tzparse(tzstr)
	timezone = tzparams[1] * 3600
	altzone = timezone - 3600
	daylight = 1
	tzname = tzparams[0], tzparams[2]

def isdst(secs):
	import time
	(tzname, delta, dstname, daystart, hourstart, dayend, hourend) = \
		tzparams
	year, month, days, hours, mins, secs, yday, wday, isdst = \
		time.gmtime(secs - delta*3600)
	return (daystart, hourstart) <= (yday+1, hours) < (dayend, hourend)

tzset()

def localtime(secs):
	return tzlocaltime(secs, tzparams)

def test():
	from time import asctime, gmtime
	import time, sys
	now = time.time()
	x = localtime(now)
	tm = x[:-1] + (0,)
	print 'now =', now, '=', asctime(tm), x[-1]
	now = now - now % (24*3600)
	if sys.argv[1:]: now = now + eval(sys.argv[1])
	x = gmtime(now)
	tm = x[:-1] + (0,)
	print 'gmtime =', now, '=', asctime(tm), 'yday =', x[-2]
	jan1 = now - x[-2]*24*3600
	x = localtime(jan1)
	tm = x[:-1] + (0,)
	print 'jan1 =', jan1, '=', asctime(tm), x[-1]
	for d in range(85, 95) + range(265, 275):
		t = jan1 + d*24*3600
		x = localtime(t)
		tm = x[:-1] + (0,)
		print 'd =', d, 't =', t, '=', asctime(tm), x[-1]
back to top