java 1900年_java – 1900年之前JodaTime和Calendar之间的差异

在使用JodaTime lib和java.util.Calendar时,我在过去的同一日期获得了不同的毫秒值.

例如,AD的第一年

void test() {

int year = 1;

DateTime dt = new DateTime(year, 1,1,0,0,0,0);

dt = dt.toDateTime(GregorianChronology.getInstance());

Calendar cal = Calendar.getInstance();

cal.clear();

cal.set(year, 0, 1, 0, 0, 0);

DateTime endDate = new DateTime(cal.getTimeInMillis());

endDate = endDate.toDateTime(GregorianChronology.getInstance());

System.out.println("JodaTime: " + dt);

System.out.println("JodaTime, ms: " + dt.getMillis());

System.out.println("Calendar: " + cal.getTime());

System.out.println("Calendar, ms: " + cal.getTimeInMillis());

System.out.println("JodaTime by Calendar: " + endDate);

}

默认情况下,DateTime使用ISOChronology,Calendar是GregorianCalendar(TH和JA语言环境除外).所以我设置了格里高利年代学,但没有改变.

执行结果是

JodaTime: 0001-01-01T00:00:00.000+01:34:52

JodaTime, ms: -62135602492000

Calendar: Sat Jan 01 00:00:00 EET 1

Calendar, ms: -62135776800000

JodaTime by Calendar: 0000-12-29T23:34:52.000+01:34:52

有人可能会说我错了吗?

解决方法:

我的猜测是,这与你的时区有关.指定UTC以从等式中删除它.

一些时区(例如巴黎)有一些“有趣”的过渡.

例如,zoneinfo建议欧洲/雅典的偏差为1:34:52直到1916年(从1895年的LMT缩写为AMT).

截至1880年,白俄罗斯的抵消时间为1:50:16.

也许Java使用的是不同的时区数据源,但不包括这些奇怪的东西?

标签:java,datetime,jodatime,calendar

来源: https://codeday.me/bug/20190827/1737789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值