gpt4 book ai didi

Python datetime 和 pandas 为同一日期提供不同的时间戳

转载 作者:行者123 更新时间:2023-12-04 13:35:03 25 4
gpt4 key购买 nike

from datetime import datetime
import pandas as pd

date="2020-02-07T16:05:16.000000000"

#Convert using datetime
t1=datetime.strptime(date[:-3],'%Y-%m-%dT%H:%M:%S.%f')

#Convert using Pandas
t2=pd.to_datetime(date)

#Subtract the dates
print(t1-t2)

#subtract the date timestamps
print(t1.timestamp()-t2.timestamp())
在这个例子中,我的理解是 datetime 和 pandas 都应该使用 timezone naive 日期。谁能解释为什么日期之间的差异为零,但时间戳之间的差异不为零?对我来说,它关闭了 5 个小时,这是我与格林威治标准时间的时区偏移量。

最佳答案

Python 的原始日期时间对象 datetime.datetime类代表本地时间。这在 the docs 中很明显但仍然可以是一个脑筋急转弯。如果您拨打 timestamp方法,返回的 POSIX 时间戳指的是 UTC(自纪元以来的秒数),因为它应该。
来自 Python datetime 对象,天真的行为 pandas.Timestamp可能违反直觉(我认为这不是那么明显)。从 tz-naive 字符串以相同的方式派生,它不代表本地时间,而是 UTC。您可以通过本地化 datetime 来验证这一点。反对UTC:

from datetime import datetime, timezone
import pandas as pd

date = "2020-02-07T16:05:16.000000000"

t1 = datetime.strptime(date[:-3], '%Y-%m-%dT%H:%M:%S.%f')
t2 = pd.to_datetime(date)

print(t1.replace(tzinfo=timezone.utc).timestamp() - t2.timestamp())
# 0.0
反过来,您可以制作 pandas.Timestamp时区感知,例如
t3 = pd.to_datetime(t1.astimezone())
# e.g. Timestamp('2020-02-07 16:05:16+0100', tz='Mitteleuropäische Zeit')

# now both t1 and t3 represent my local time:
print(t1.timestamp() - t3.timestamp())
# 0.0

我的底线是,如果您知道您拥有的时间戳代表某个时区,请使用时区感知日期时间,例如对于 UTC
import pytz # need to use pytz here since pandas uses that internally

t1 = datetime.strptime(date[:-3], '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=pytz.UTC)
t2 = pd.to_datetime(date, utc=True)

print(t1 == t2)
# True
print(t1-t2)
# 0 days 00:00:00
print(t1.timestamp()-t2.timestamp())
# 0.0

关于Python datetime 和 pandas 为同一日期提供不同的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com