gpt4 book ai didi

java - 自纪元以来时间不稳定的公历日历

转载 作者:行者123 更新时间:2023-12-02 06:38:05 24 4
gpt4 key购买 nike

我正在与使用 2000.01.01 作为纪元的外部系统进行时间转换。我需要自纪元以来的毫秒数进行各种计算,因此我通过使用常数在两者之间进行转换(忽略闰秒等的细微差别;我的常数可能不准确,但现在并不重要)。在测试时我注意到时间转换的奇怪之处。

Calendar epoch = new GregorianCalendar(TimeZone.getTimeZone("Zulu"));
epoch.set(2000,Calendar.JANUARY,1,0,0,0);
System.out.println("EPOCH DIFF:"+(epoch.getTime().getTime()-946684800000L));

您可能会认为这总是会产生相同的结果。如果你循环运行它,它就会发生:

for(int i = 0; i < 10; i++) {
System.out.println("EPOCH DIFF:"+(epoch.getTime().getTime()-946684800000L));
}

(RESULT: -400)

但是,如果您一次又一次地在新虚拟机中运行,则该值会(看起来)不断随机变化!我刚刚在不同的 JVM 中快速连续运行了 5 次,并得到了不同的结果:

-276
-612
-376
-458
-573

我用不同的时区重新进行了测试,但遇到了同样的问题。

有谁知道这可能是什么原因造成的吗?

最佳答案

日历对象时间精确到毫秒。在您的 set epoch.set(2000,Calendar.JANUARY,1,0,0,0) 方法中,毫秒值不会重置为 0。

您可以单独将其设置为零,如下所示,以便在多次运行中获得相同的差异

 epoch.set(Calendar.MILLISECOND, 0)

关于java - 自纪元以来时间不稳定的公历日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com