我试图将美国/东部时区日期转换为 UTC,以上传到仅接受 UTC 时间但显示本地时区时间的网站。我有以下代码示例,其中当我转换最近的日期时,偏移量(5:00 或 4:00)没有问题,但是当我转换诸如 1900-01-01 之类的日期时,偏移量会变成大约4:56 等
import pytz
import tzlocal
from datetime import datetime
usest=tzlocal.get_localzone()#My local zone is US/Eastern. I could directly use that here as pytz.timezone("US/Eastern")
dt=datetime(1900,1,1,0,0,0)
dt_aware=usest.localize(dt,is_dst=True)
utcdate=dt_aware.astimezone(pytz.utc)
print (utcdate)
1900-01-01 04:56:00+00:00
dt1=datetime(2016,1,1,0,0,0)
dt1_aware=usest.localize(dt1,is_dst=True)
utcdate1=dt1_aware.astimezone(pytz.utc)
print (utcdate1)
2016-01-01 05:00:00+00:00
如果是第一次约会,我也期待 1900-01-01 05:00:00+00:00。为什么会发生这种情况?它是否正确?
值得注意的是,当我将 UTC 时间“1900-01-01 04:56:00+00:00”转换回美国/东部时间时,它会转换回“1900-01-01 00:00:00” ”。所以,几分钟的差异背后一定有一定的逻辑。
我在维基百科网站上找到了这个“https://en.wikipedia.org/wiki/Tz_database”在“示例区域和规则线”部分下
区域名称 GMTOFF 规则格式 [UNTIL]
美洲区/纽约 -4:56:02 - LMT 1883 11 月 18 日 12:03:58
我不一定明白他们在说什么,但我看到那里有偏移 4:56。我觉得我更接近答案,但需要一些帮助。
更新:我在我的 Mac book pro 上尝试了 zdump,并获得了 1901 年的输出。无法获得之前几年的详细信息。我研究了 tz 数据库中提供的详细信息,但找不到明确的答案。出于我当前项目的目的,我使用了替代区域转换器模块(钟摆),它并不试图忠实于历史,而是遵循当前的夏令时周期,这解决了我的问题。但是,问题仍然存在。在东部时区和 UTC 之间转换 1900 年之前的日期时,为什么会出现与 5:00/4:00 小时不同的时间偏移?