tzparse.py
来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 99 行
PY
99 行
"""Parse a timezone specification."""# XXX Unfinished.# XXX Only the typical form "XXXhhYYY;ddd/hh,ddd/hh" is currently supported.import warningswarnings.warn( "The tzparse module is obsolete and will disappear in the future", DeprecationWarning)tzpat = ('^([A-Z][A-Z][A-Z])([-+]?[0-9]+)([A-Z][A-Z][A-Z]);' '([0-9]+)/([0-9]+),([0-9]+)/([0-9]+)$')tzprog = Nonedef tzparse(tzstr): """Given a timezone spec, return a tuple of information (tzname, delta, dstname, daystart, hourstart, dayend, hourend), where 'tzname' is the name of the timezone, 'delta' is the offset in hours from GMT, 'dstname' is the name of the daylight-saving timezone, and 'daystart'/'hourstart' and 'dayend'/'hourend' specify the starting and ending points for daylight saving time.""" global tzprog if tzprog is 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): """Given a Unix time in seconds and a tuple of information about a timezone as returned by tzparse(), return the local time in the form (year, month, day, hour, min, sec, yday, wday, tzname).""" 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, tznamedef tzset(): """Determine the current timezone from the "TZ" environment variable.""" 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): """Return true if daylight-saving time is in effect for the given Unix time in the current timezone.""" 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): """Get the local time in the current timezone.""" 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]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?