DateTime精度差异.NET与Java

Miz*_*zor 4 .net c# java datetime date

我将一些计算例程从.Net移植到Java但是在Date类中似乎存在一些精度问题.也许我已经盯着自己,但我无法弄清楚为什么结果会有所不同.

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

.净

[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);
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

Are*_*rff 8

精彩!

问题:

Java日历月开始在0净日期时间个月从1开始.

所以你将.Net 2月与Java游行进行比较.而且,正如Arjan所说,3月27日是许多时区的夏令时变化.

使用Java Calendar时,这是一个非常常见的问题.为避免这种情况,您应该使用指定的常量,如下所示:

Date d1 = createDate(2011, Calendar.MARCH, 26, 19, 25, 24); // Calendar.MARCH == 2
Run Code Online (Sandbox Code Playgroud)