为何pytz转换美国东部时区时偏移为-0456而非-0500?
为什么用pytz转换1900年的时区得到的是LMT-0456而非-0500?
核心原因:历史时区规则差异
你看到的LMT -0456不是问题,是符合历史事实的结果:
- 1900年时,美国东部还没统一采用如今的UTC-5(EST/EDT)标准时区。当时纽约使用的是本地平均时间(Local Mean Time, LMT)——这是根据当地经度(约西经74°00')计算出的太阳平均时间,对应的UTC偏移正好是-04:56。
- 美国东部直到1918年才推行标准时区制度,之后才统一使用UTC-5的偏移(夏令时期间调整为UTC-4)。
代码中的笔误修正
你的代码里存在未定义变量的问题:lesson应该替换为original_utc,修正后的代码如下:
import datetime import pytz original_utc = datetime.datetime(1900,6,6,10,40, tzinfo=pytz.timezone('UTC')) in_eastern = original_utc.astimezone(pytz.timezone('America/New_York')) print("UTC time: ", original_utc.strftime("%Y:%m:%d %H:%M:%S %Z %z")) print("----------") print("EST time", in_eastern.strftime("%Y:%m:%d %H:%M:%S %Z %z"))
验证现代时区偏移
如果想验证1918年之后的美国东部时区偏移,可以把时间改为较近的日期,比如:
original_utc = datetime.datetime(2024,6,6,10,40, tzinfo=pytz.timezone('UTC')) in_eastern = original_utc.astimezone(pytz.timezone('America/New_York')) # 输出会显示 EDT -0400(夏令时),非夏令时季节则为 EST -0500
内容的提问来源于stack exchange,提问作者abhivemp
相关产品推荐
相关产品推荐

