time.gmtime()是否有一个反函数,可将UTC元组解析为自纪元以来的秒数?

时间:2020-03-06 14:41:25  来源:igfitidea点击:

python的时间模块似乎有点偶然。例如,下面是文档字符串中的方法列表:

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()没有逆?

额外的问题:我们将如何命名该方法?我们将如何实施?

解决方案

我一直认为时间和日期时间模块有点不连贯。无论如何,这是mktime的反函数

import time
def mkgmtime(t):
    """Convert UTC tuple to seconds since Epoch"""
    return time.mktime(t)-time.timezone

我只是Python的新手,但这是我的方法。

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)

在那里,我为该函数建议的名称也是如此。 :-)如果夏时制值发生变化或者类似情况,则每次都要重新计算" disp"很重要。 (Jython需要转换回元组。CPython似乎不需要。)

这真是太棒了,因为time.gmtime总是将DST标志设置为false。我讨厌代码。必须有一种更好的方法来做到这一点。而且可能还有一些我还没有遇到的极端情况。

实际上有一个反函数,但是出于某些奇怪的原因,它在日历模块中:calendar.timegm()。我在此答案中列出了功能。