我想知道为什么我总是以毫秒为单位来区分这个日期。
有什么想法吗?
这是输出:
date = 1572794103293 ms
date2 = 1572794103341 ms
date3 = 1572794103341 ms
date4 = 1572794103341 ms
这是代码:
Date date = createDate();
Date date2 = createDate();
Date date3 = createDate();
Date date4 = createDate();
System.out.println(date.getTime());
System.out.println(date2.getTime());
System.out.println(date3.getTime());
System.out.println(date4.getTime());
private static Date createDate() {
Calendar c = GregorianCalendar.getInstance();
c.set(2019, Calendar.NOVEMBER, 03, 16, 15, 03);
return c.getTime();
}
答案 0 :(得分:1)
在Calendar.set
的文档中,有人说:
设置字段YEAR,MONTH,DAY_OF_MONTH,HOUR,MINUTE和SECOND的值。保留其他字段的先前值。如果不需要,请先致电clear()。
原因是并非所有字段都使用此方法设置,在您的情况下,您没有设置MILLISECOND
。因此它在创建实例时保留值。
设置此Calendar的所有日历字段值和时间值(与Epoch的毫秒偏移量)undefined。
一个简单的例子:
Calendar c = GregorianCalendar.getInstance();
c.clear();
c.set(2019, Calendar.NOVEMBER, 03, 16, 15, 03);
System.out.println(c.getTimeInMillis());
1572794103000
未定义的毫秒数将为0
答案 1 :(得分:1)
除了评论和AxelH的答案,提到Calendar
实例的毫秒不会被Calendar.set
更改的事实,仍然有好奇心,你得到{{{{ 1}},date2
和date3
,但date4
的值不同。
这是因为第一次调用date
时,JVM必须初始化createDate()
类,这在Date
初始化后发生。
因此,在第一次呼叫时Calendar c
需要的时间多于连续呼叫的时间,您可以将其视为c.getTime()
的值与其他3个实例之间的差异。
如果您在第一次致电date
之前添加了对new Date()
的来电,则每个值之间的差异应该相同。
请注意,这不能解决您的问题,如果您的计算机足够快,它就会隐藏它。它只是对你得到的特定价值的解释。