如果原始 tz 不是 UTC,Python 日期时间的时间戳在替换时区两次后会有所不同


from datetime import datetime
import pytz
tz = pytz.timezone("Asia/Singapore")
date_1 = datetime.now(tz=pytz.utc)
print(date_1.replace(tzinfo=tz).replace(tzinfo=pytz.utc).timestamp())
print(date_1.timestamp())
date_2 = datetime.now(tz=tz)
print(date_2.replace(tzinfo=pytz.utc).replace(tzinfo=tz).timestamp())
print(date_2.timestamp())

输出:

1483599557.338336
1483599557.338336
1483603457.33842
1483599557.33842

为什么变量 date_2 的时间戳在 tzinfo 替换两次后不同?
因为变量date_1是相同的。

时区和偏移量多年来一直在变化。pytz 创建时区对象时提供的默认区域名称和偏移量是该区域最早可用的名称,有时它们看起来有点奇怪。使用规范化将区域更改为日期时,将替换正确的区域名称和偏移量。仅使用日期时间构造函数将区域附加到日期不允许它正确调整。

tz.normalize(pytz.utc.normalize(date_2)).timestamp() == date_2.timestamp()

相关内容

  • 没有找到相关文章

最新更新