java - 减去毫秒不会给出预期的结果

标签 java date datetime grails groovy

Date day1 = set_datetime(2017, Calendar.JUNE, 28, 8, 00, 0); 

Date day2 = set_datetime(2017, Calendar.JUNE, 28, 10, 00, 0);

def set_datetime(int year, int month, int day, int hour, int minute, int second) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month, day, hour, minute, second);
        Date cal_date = cal.getTime();
        return cal_date
    }

println "\t\t (day2.getTime() - day1.getTime()) = " + (day2.getTime() - day1.getTime())

(day2.getTime() - day1.getTime()) = 7199996

这里似乎有些不对劲,因为当我将毫秒转换为小时时,7199996 并不正好是 2 小时 (7200000)。事实上,少了 4 毫秒。为什么不是 7200000 毫秒?

最佳答案

您没有清除毫秒字段。

添加

cal.clear();

cal.set(...); 行之前,或者添加

cal.set(Calendar.MILLISECONDS, 0);

更一般地说,不要使用 java.util.Calendarjava.util.Date:它们是旧的、设计不佳的类,充满了众所周知的错误。

使用 java.time 包中的类,在 Java 8 中引入;或来自 threetenbp 的类(class)或早期版本的 Java 上的 JodaTime。

关于java - 减去毫秒不会给出预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44822030/

相关文章:

java - 在启动时获取许多项目时不断出现内存不足错误

javascript - 在 JavaScript 中格式化日期字符串

python - Matplotlib 日期作为刻度

java - Apache POI 打印线条形状问题

java - 如何在 selendroid 中验证 toast 消息

java - 在 JTextArea 中显示后台进程状态

javascript - 找不到二月十五日

c# - Julian 日期字符串到 DateTime

pandas - 根据时间间隔使用 DatetimeIndex 对 Pandas 数据帧进行切片

python - 根据年份和儒略日在 pandas 中创建日期时间