You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带时区时间戳的儒略日是否应随时区变化?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:47:44