0
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

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

4

1 回答 1

0

时区和偏移量随时间变化。pytz 创建时区对象时提供的默认区域名称和偏移量是该区域最早可用的名称和偏移量,有时它们看起来有点奇怪。当您使用 normalize 将区域更改为日期时,将替换正确的区域名称和偏移量。简单地使用 datetime 构造函数将区域附加到日期不允许它正确调整。

tz.normalize(pytz.utc.normalize(date_2)).timestamp() == date_2.timestamp()
于 2017-01-05T07:36:59.523 回答