日期/时间转换使用时间.mktime似乎错了

2024-05-16 09:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> import time
>>> time.strptime("01-31-2009", "%m-%d-%Y")
(2009, 1, 31, 0, 0, 0, 5, 31, -1)
>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233378000.0
>>> 60*60*24 # seconds in a day
86400
>>> 1233378000.0 / 86400
14275.208333333334

time.mktime应返回自纪元以来的秒数。既然我给它一个时间是在午夜,而纪元是在午夜,结果不应该被一天中的秒数整除吗?在


Tags: inimporttime时间secondsday纪元秒数
3条回答

简而言之:因为时区。在

纪元以UTC为单位。在

例如,我使用IST(爱尔兰标准时间)或UTC+1。^{}是相对于我的时区的,因此在我的系统中,这是指

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000.0

因为你得到的结果是1233378000,所以你比我晚了5个小时

^{pr2}$

看一下在UTC下工作的^{}函数。在

菲尔的回答真的解决了这个问题,但我会再详细说明一下。因为纪元是UTC,如果我想将其他时间与纪元进行比较,我也需要将它们解释为UTC。在

>>> calendar.timegm((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000
>>> 1233360000 / (60*60*24)
14275

通过将时间元组转换为时间戳,将is视为UTC时间,我得到了一个可以被一天中的秒数整除的数字。在

我可以用这个把一个日期从历元表示转换成一天,这是我最终要追求的。在

mktime(...)
    mktime(tuple) -> floating point number

    Convert a time tuple in local time to seconds since the Epoch.

当地时间。。。真想不到。在

时间元组:

^{pr2}$

顺便说一句,我们似乎相隔6个小时:

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233356400.0
>>> (1233378000.0 - 1233356400)/(60*60)
6.0

相关问题 更多 >