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

Joda Time处理0000年即时时间/负纪元时间戳日期偏差是bug吗?

结论

该差异既不是使用错误,也不是Joda Time的bug,是两类API采用的纪年标准不同导致的正常现象。

具体差异说明

  • java.util.Date的底层纪年规则:遵循传统公历纪年,不存在公元0年,公元前1年之后直接是公元1年,其toString()输出的年份基于这套规则计算。
  • Joda Time、java.time的底层纪年规则:严格遵循ISO 8601国际标准,该标准明确定义了公元0年(对应传统纪年的公元前1年),时间显示完全符合这套标准的计算逻辑。

测试结果验证

你使用的时间戳-62135640000000L对应的ISO标准UTC时间就是0000-12-31T12:00:00Z,Joda Time和java.time的输出完全一致,属于正确结果。
java.util.Date输出的Sun Jan 02 12:00:00 UTC 1是因为它在toString阶段自动做了纪年规则转换:把ISO体系的0000年映射为传统纪年的公元1年,同时附带了规则转换带来的日期偏移。

兼容方案

如果需要Joda Time输出和java.util.Date一致的纪年结果,替换默认的ISO纪年系统为GregorianJulianCalendarSystem即可。

内容的提问来源于stack exchange,提问作者Kashyap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:09:04