加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

将TDateTime(Delphi)表示为Java Calendar对象时的计算错误

发布时间:2020-12-15 09:05:16 所属栏目:大数据 来源:网络整理
导读:Delphi TDateTime纪元是1899年12月30日,Java Calendar使用Unix纪元,即1970年1月1日.以下代码: Calendar epoch = Calendar.getInstance(TimeZone.getTimeZone("UTC"));epoch.set(1899,12,30,0);epoch.getTimeInMillis(); 给出-2206483199054但是根据手动计算
Delphi TDateTime纪元是1899年12月30日,Java Calendar使用Unix纪元,即1970年1月1日.以下代码:

Calendar epoch = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
epoch.set(1899,12,30,0);
epoch.getTimeInMillis();

给出-2206483199054但是根据手动计算它必须是-2209161600000. delta 2678400946(31天)从哪里来?我错过了什么?

是的,我现在可以使用毫秒作为解决方法,但我想知道错误来自哪里.

附: epoch是java.util.GregorianCalendar的一个实例.

解决方法

月份字段是从0开始的,所以12月是11月,而不是12月.这就解释了为什么你要离开31天 – 你已经到了1900年1月30日.你可以调用 setLenient(false)来捕捉这种错误.

set方法只设置参数中提到的六个字段;它会使其他字段保持不变,包括毫秒字段,这就解释了为什么你实际上已经超过31天了.

The documentation建议您先拨打clear(),但您可能更愿意拨打清除(Calendar.MILLISECOND)以保持时区信息不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读