pd.to_datetime与time.mktime不一致

时间:2018-08-23 03:18:49

标签: python pandas datetime time

import time
import pandas as pd
x=pd.to_datetime('2017/01/01',yearfirst=True)
print('x:', x)
y=pd.to_datetime(time.mktime(x.timetuple()),unit='s')
print('y:', y)

结果是:

x: 2017-01-01 00:00:00
y: 2016-12-31 16:00:00

我希望它们是相同的,因为我们通常将TimpStamp转换为秒,然后再转换回它们。 我了解这与时区有关,但是如何消除时区影响?

编辑: 软件包信息:Python 3.6,Pandas 0.23.1和dateutil 2.7.3 当地时区:UTC + 8

1 个答案:

答案 0 :(得分:1)

我发现问题是因为time.mktime假定timetuple是本地时间。由于我使用的是UTC + 8,因此time.mktime首先需要-8小时将其转换为UTC,然后将其转换为秒。

由于@abarnert,我发现我们可以只使用x.value(它是纳秒级),如果需要秒级版本,只需使用x.value / 10 ** 9。

此外,如果有人想要时区中性版本,可以使用calendar.timegm(x.timetuple())与time.mktime()做类似的工作,但时区中性。