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

标签 c# java .net datetime date

我正在将一些计算例程从 .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/

相关文章:

.net - 分页选择,在数据库上或在 web 应用程序中

c# - 如何避免 300 个案例的开关阻塞?

C# 等效于 JScript 的新 ActiveXObject

c# - PCL 程序集和读取资源文件

java - 如何检测java系统类?

java - Android应用程序ActivityThread中的RuntimeException未能找到一些来源?

C#项目简单计算器

c# - 使用 async-await 进行数据库查询

c# - 在 .NET 中解密和检查签名时如何忽略系统存储?

java - 从 .accdb 文件获取数据