gpt4 book ai didi

c# - DateTime 精度差异.NET 与 Java

转载 作者:搜寻专家 更新时间:2023-11-01 01:47:17 26 4
gpt4 key购买 nike

我正在将一些计算例程从 .Net 移植到 Java,但 Date 类中似乎存在一些精度问题。也许我对此视而不见,但我无法弄清楚为什么结果不同。

我应该如何处理日期以跨平台获得相同的数字(毫秒)?

.Net

[Test] public void foo() {
DateTime dt1 = new DateTime(2011, 2, 26, 19, 25, 24);
DateTime dt2 = new DateTime(2011, 2, 28, 18, 40, 25);
double millis = (dt2 - dt1).TotalMilliseconds;
Assert.AreEqual(170101000, millis);
}

Java

@Test public void foo() throws Exception {
Date d1 = createDate(2011, 2, 26, 19, 25, 24);
Date d2 = createDate(2011, 2, 28, 18, 40, 25);
long millis = d2.getTime() - d1.getTime();
Assert.assertEquals(166501000, millis, 0.01);
}

private static Date createDate(int year, int month, int day,
int hour, int minute, int second) {
Calendar instance = Calendar.getInstance();
instance.clear();
instance.set(year, month, day, hour, minute, second);
return instance.getTime();
}

最佳答案

太棒了!

问题:

Java Calendar months start at 0.Net Datetime months start at 1 .

所以您是在将 .Net 二月与 Java 三月进行比较。而且,正如 Arjan 所建议的那样,3 月 27 日是许多时区夏令时的变化。

这是使用 Java 日历时非常常见的问题。为避免这种情况,您应该像这样为月份使用命名常量:

Date d1 = createDate(2011, Calendar.MARCH, 26, 19, 25, 24); // Calendar.MARCH == 2

关于c# - DateTime 精度差异.NET 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981582/

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