为何使用pytz转换1901年12月前的datetime无法得到整点UTC时间?
为什么1901年12月15日前的时区转换结果带分钟?
这不是pytz的使用问题,根源是历史时区规则的变更——pytz依赖IANA时区数据库(tzdata),里面完整记录了全球各地时区偏移的历史变化,很多地区早期的时区偏移并非整小时,直到1901年12月15日才统一调整为整小时偏移。
具体时区的历史偏移说明
- 澳大利亚悉尼(Australia/Sydney):1895年至1901年12月14日期间,悉尼采用UTC+10:05的偏移(比UTC快10小时5分钟)。所以1901-12-14的本地时间00:00转换为UTC时,就是00:00减去10小时5分钟,得到
1901-12-13 13:55:00+00:00;1901年12月15日起,悉尼将时区偏移调整为UTC+10整小时,之后的转换结果自然是整点。 - 日本(Japan):1888年至1901年12月14日期间,日本使用UTC+09:19的偏移(比UTC快9小时19分钟)。1901-12-14本地00:00转UTC时,减去9小时19分钟就得到
1901-12-13 14:41:00+00:00;1901年12月15日起调整为UTC+09整小时,后续转换结果为整点。 - 美国东部(US/Eastern):当时美国东部已经采用UTC-05:00的整小时偏移,所以无论12月14日还是15日,本地时间00:00转UTC都是00:00加上5小时,结果始终是整点,这和你的输出一致。
你的代码写法完全正确:先用localize为 naive datetime 绑定时区,再通过astimezone(pytz.UTC)转换时区,符合pytz的标准使用规范。
内容的提问来源于stack exchange,提问作者Andrew Allaire
相关产品推荐
相关产品推荐

