【发布时间】:2017-04-24 16:16:09
【问题描述】:
我试图将美国/东部时区日期转换为 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”。所以,几分钟的差距,背后一定有一定的逻辑。
我在 Wikipedia 站点“https://en.wikipedia.org/wiki/Tz_database”的“示例区域和规则行”部分下找到了这个
区域名称 GMTOFF 规则格式 [UNTIL]
Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
我不一定明白他们在说什么,但我看到那里的偏移量是 4:56。我觉得我离答案更近了,但需要一些帮助。
更新:我在我的 Mac book pro 上尝试了 zdump,得到了 1901 年的输出。无法,获取之前几年的详细信息。我研究了 tz 数据库中提供的详细信息,但找不到明确的答案。出于我当前项目的目的,我使用了一个替代区域转换器模块(钟摆),它不会试图真实地反映历史,而是遵循解决了我的问题的当前夏令时周期。但是,问题仍然存在。为什么在东部时区和 UTC 之间转换 1900 年之前的日期时,时间偏移不同于 5:00/4:00 小时?
【问题讨论】:
标签: python datetime timezone pytz