Python 时间转换不一致

Python 时间转换不一致,python,pandas,datetime,timezone,Python,Pandas,Datetime,Timezone,一个可重复的例子: import pandas as pd now = pd.Timestamp('2018-04-09 09:10') start_of_today = pd.datetime(now.year, now.month, now.day, 0) print(pd.to_datetime(start_of_today.timestamp(), unit='s')) 最后一行将返回2018-04-08 22:00:00,而不是2018-04-09 00:00,为什么会发生这种情况?

一个可重复的例子:

import pandas as pd
now = pd.Timestamp('2018-04-09 09:10')
start_of_today = pd.datetime(now.year, now.month, now.day, 0)
print(pd.to_datetime(start_of_today.timestamp(), unit='s'))

最后一行将返回2018-04-08 22:00:00,而不是2018-04-09 00:00,为什么会发生这种情况?

根据
日期时间。时间戳

对于aware datetime实例,返回值计算为:

(dt-datetime(1970,1,1,tzinfo=timezone.utc))。总秒数()

因此,您需要将
pd.datetime
对象与UTC时区对齐:

from datetime import timezone
import pandas as pd

now = pd.Timestamp('2018-04-09 09:10')
start_of_today = pd.datetime(now.year, now.month, now.day, 0, 0, 0, 0, timezone.utc)
print(pd.to_datetime(start_of_today.timestamp(), unit='s'))
这是因为

它返回
(dt-datetime(1970,1,1,tzinfo=timezone.utc)).total_seconds()

时区是utc

你可以看到

In [65]: start_of_today.timestamp()
Out[65]: 1523203200.0

In [66]: pd.Timestamp('2018-04-09 00:00').timestamp()
Out[66]: 1523232000.0

他们的时间戳不同。

是时区造成的吗?