在Java Date/Calendar对象中找到的神秘毫秒数

Mal*_*vin 13 java calendar date

使用Dates和时有一种奇怪的怪异Calendar.要点是我想创建一个特定的日期,例如

Calendar cal = Calendar.getInstance();
cal.set(1970, 0, 1, 0, 0, 0);
Date date = cal.getTime(); 
Run Code Online (Sandbox Code Playgroud)

现在的问题是:它显示了正确的日期,但是在调试时我在日期变量下看到例如"fasttime" -3599459.这使我的JUnit测试失败,因为期望的值是-3600000.似乎日历增加了541毫秒或类似于初始化时...

问题是:是不是可以简单地创建一个固定的日期而不是'我在后台'鬼功能中添加几毫秒?

Jon*_*eet 12

set你正在调用的方法的文档:

设置字段YEAR,MONTH,DAY_OF_MONTH,HOUR,MINUTE和SECOND的值.保留其他字段的先前值.如果不需要,请先调用clear().

所以它保留了毫秒值.它不会增加几毫秒 - 它会在你打电话时占用系统时间getInstance,正如记录所做的那样.

clear()首先调用,或显式设置毫秒值.(我个人也会使用clear().我也会明确设定时区,只是为了让你更清楚你期待的时间.

或者,使用约达时间入手-这是一个更愉快的日期/时间API.

  • @Malvin:请注意,如果你使用`clear()`,这对于你只设置年/月/日或年/月/日/小时/分钟的情况是正确的...这就是我喜欢的原因使用`clear()`覆盖你接受的答案*just*设置毫秒. (2认同)

Dan*_* D. 7

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

cal.set(Calendar.MILLISECOND, 0);
Run Code Online (Sandbox Code Playgroud)

这将确保您将毫秒设置为零.