在 Java 日期/日历对象中找到的神秘毫秒数

2022-09-04 20:11:00

使用 s 和 时出现奇怪的怪异。重点是我想创建一个特定的日期,例如DateCalendar

Calendar cal = Calendar.getInstance();
cal.set(1970, 0, 1, 0, 0, 0);
Date date = cal.getTime(); 

现在的问题是:它显示了正确的日期,但是在调试时,我在date变量下看到一个“快速时间”,例如。这使我的测试失败,因为预期值为 。日历似乎增加了541毫秒或类似的东西,当初始化时...-3599459JUnit-3600000

问题是:有没有可能简单地创建一个固定的日期,而没有这个“我在后台添加一些毫秒”的幽灵功能?


答案 1

从您正在调用的 set 方法的文档:

设置“年”、“月”、“DAY_OF_MONTH”、“小时”、“分钟”和“秒”字段的值。将保留其他字段的先前值。如果不需要这样做,请先调用 clear()。

因此,它保留了毫秒值。它不会增加一些毫秒 - 当您调用时,它会占用系统时间,就像文档记录的那样。getInstance

首先调用 clear(), 或显式设置毫秒值。(我个人会使用.我还明确设置了时区,只是为了更清楚地说明您期望的时间。clear()

或者,使用Joda Time开始 - 这是一个更令人愉快的日期/时间API。


答案 2

在调用之前添加此行:cal.getTime()

cal.set(Calendar.MILLISECOND, 0);

这将确保您将毫秒数设置为零。