python datetime的时间戳在替换时区两次后不同,如果原始tz不是&ut; utc

时间:2017-01-05 07:11:00

标签: python datetime python-3.5 tzinfo

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是相同的。

1 个答案:

答案 0 :(得分:0)

多年来,时区和抵消都在变化。 pytz创建时区对象时传递的默认区域名称和偏移量是该区域最早可用的区域名称和偏移量,有时它们看起来有点奇怪。使用normalize将区域更改为日期时,将替换正确的区域名称和偏移量。只需使用datetime构造函数将区域附加到日期就不允许它正确调整。

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