Is there an inverse function for time.gmtime() that parses a UTC tuple to seconds since the epoch?
python的时间模块似乎有点杂乱无章。 例如,以下是docstring中的方法列表:
1 2 3 4 5 6 7 8 9 10 11 | time() -- return current time in seconds since the Epoch as a float clock() -- return CPU time since process start as a float sleep() -- delay for a number of seconds given as a float gmtime() -- convert seconds since Epoch to UTC tuple localtime() -- convert seconds since Epoch to local time tuple asctime() -- convert time tuple to string ctime() -- convert time in seconds to string mktime() -- convert local time tuple to seconds since Epoch strftime() -- convert time tuple to string according to format specification strptime() -- parse string to time tuple according to format specification tzset() -- change the local timezone |
查看localtime()及其逆mktime(),为什么gmtime()没有反转?
奖金问题:你怎么称呼这个方法? 你会如何实现它?
实际上有一个反函数,但由于一些奇怪的原因,它在日历模块中:calendar.timegm()。我列出了这个答案中的功能。
我一直认为时间和日期时间模块有点不连贯。无论如何,这是mktime的反转
1 2 3 4 | import time def mkgmtime(t): """Convert UTC tuple to seconds since Epoch""" return time.mktime(t)-time.timezone |
mktime文档在这里有点误导,没有任何意义说它计算为本地时间,而是根据提供的元组计算Epoch的秒数 - 无论您的计算机位置如何。
如果您确实想要从utc_tuple转换为本地时间,您可以执行以下操作:
1 2 3 4 5 6 7 8 9 | >>> time.ctime(time.time()) 'Fri Sep 13 12:40:08 2013' >>> utc_tuple = time.gmtime() >>> time.ctime(time.mktime(utc_tuple)) 'Fri Sep 13 10:40:11 2013' >>> time.ctime(time.mktime(utc_tuple) - time.timezone) 'Fri Sep 13 12:40:11 2013' |
也许更准确的问题是如何将utc_tuple转换为local_tuple。
我会称之为gm_tuple_to_local_tuple(我更喜欢长而具有描述性的名字):
1 2 | >>> time.localtime(time.mktime(utc_tuple) - time.timezone) time.struct_time(tm_year=2013, tm_mon=9, tm_mday=13, tm_hour=12, tm_min=40, tm_sec=11, tm_wday=4, tm_yday=256, tm_isdst=1) |
Validatation:
1 2 | >>> time.ctime(time.mktime(time.localtime(time.mktime(utc_tuple) - time.timezone))) 'Fri Sep 13 12:40:11 2013' |
希望这可以帮助,
髂骨。
我只是Python的新手,但这是我的方法。
1 2 3 4 5 6 | def mkgmtime(fields): now = int(time.time()) gmt = list(time.gmtime(now)) gmt[8] = time.localtime(now).tm_isdst disp = now - time.mktime(tuple(gmt)) return disp + time.mktime(fields) |
在那里,我提出了这个功能的名称。 :-)每次重新计算
这是超级ick,因为