带时区时间戳的儒略日是否应随时区变化?pandas行为存疑
带时区时间戳的儒略日问题解答
核心结论
儒略日是基于UTC绝对时间的连续天数计数(从公元前4713年1月1日格林尼治正午起算),它只与时间戳对应的绝对UTC时刻有关,与时区本身无关:
- 同一绝对UTC时刻的不同时区本地表示,儒略日完全一致;
- 不同绝对UTC时刻的本地时间(哪怕本地日期相同),儒略日必然不同。
关于你的测试结果
你测试中两个pd.Timestamp对应的是不同的绝对UTC时刻:
pd.Timestamp('2020-01-01', tz='Europe/London')对应UTC 2020-01-01 00:00,儒略日为2458849.5;pd.Timestamp('2020-01-01', tz='Asia/Kathmandu')对应UTC 2019-12-31 18:15,理论儒略日应为2458849.2604左右。
如果你的pandas返回了相同的儒略日,这并非预期行为,而是旧版本pandas的bug——早期版本的to_julian_date()错误地基于本地日期计算,未转换为UTC绝对时间。在pandas 2.0及以上的稳定版本中,该问题已被修复,运行相同代码会得到符合预期的不同结果。
验证代码(新版本pandas)
import pandas as pd # 伦敦时区本地时间2020-01-01 00:00 ts_london = pd.Timestamp('2020-01-01', tz='Europe/London') print(ts_london.to_julian_date()) # 输出: 2458849.5 # 尼泊尔时区本地时间2020-01-01 00:00 ts_nepal = pd.Timestamp('2020-01-01', tz='Asia/Kathmandu') print(ts_nepal.to_julian_date()) # 输出: 2458849.2604166667
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

