Java 日期始终获取不同的getTime()
我想知道为什么这个日期总是以毫秒为单位 有什么想法吗 以下是输出:Java 日期始终获取不同的getTime(),java,date,Java,Date,我想知道为什么这个日期总是以毫秒为单位 有什么想法吗 以下是输出: date = 1572794103293 ms date2 = 1572794103341 ms date3 = 1572794103341 ms date4 = 1572794103341 ms 代码如下: Date date = createDate(); Date date2 = createDate(); Date date3 = createDate(); Date date4 = createDate()
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();
}
在的文件中,说明:
设置年、月、月的日、小时、分钟和秒字段的值。其他字段的先前值将保留。如果不需要,请先呼叫
原因是并非所有字段都使用此方法设置,在您的情况下,您没有设置毫秒。因此,它在创建实例时保留该值
意志的召唤
设置此未定义日历的所有日历字段值和时间值(与历元的毫秒偏移)
一个简单的例子:
Calendar c = GregorianCalendar.getInstance();
c.clear();
c.set(2019, Calendar.NOVEMBER, 03, 16, 15, 03);
System.out.println(c.getTimeInMillis());
1572794103000
未定义的毫秒将在的文档中给出0,据说:
设置年、月、月的日、小时、分钟和秒字段的值。其他字段的先前值将保留。如果不需要,请先呼叫
原因是并非所有字段都使用此方法设置,在您的情况下,您没有设置毫秒。因此,它在创建实例时保留该值
意志的召唤
设置此未定义日历的所有日历字段值和时间值(与历元的毫秒偏移)
一个简单的例子:
Calendar c = GregorianCalendar.getInstance();
c.clear();
c.set(2019, Calendar.NOVEMBER, 03, 16, 15, 03);
System.out.println(c.getTimeInMillis());
1572794103000
未定义的毫秒将给出0除了注释和AxelH的回答提到日历
实例的毫秒不被日历更改的事实之外。设置
,仍然很好奇的是,对于日期2
、日期3
和日期4
,您会得到相同的值,但是日期的值不同
这是因为在您第一次调用createDate()
时,JVM必须初始化Date
类,这发生在Calendar c
初始化之后
因此,在第一次调用时,c.getTime()
需要比连续调用更多的时间,这可以看作是date
的值与其他3个实例之间的差异
如果在第一次调用createDate()
之前添加对new Date()
的调用,则每个值之间的差值应相同
请注意,这并不能解决您的问题,如果您的机器足够快,它只会隐藏问题。这仅仅是对您得到的特定值的一种解释。除了注释和AxelH的回答提到日历
实例的毫秒数没有被日历改变这一事实之外。设置
,您仍然好奇地发现日期2的值相同,date3
和date4
,但日期的值不同
这是因为在您第一次调用createDate()
时,JVM必须初始化Date
类,这发生在Calendar c
初始化之后
因此,在第一次调用时,c.getTime()
需要比连续调用更多的时间,这可以看作是date
的值与其他3个实例之间的差异
如果在第一次调用createDate()
之前添加对new Date()
的调用,则每个值之间的差值应相同
请注意,这并不能解决您的问题,如果您的机器足够快,它只会隐藏问题。这只是对您得到的特定值的解释。因为您没有使用set
设置毫秒,所以每个GregoriaCalendar
都将使用自己的毫秒set(int年,int月,int日期,int小时,int分钟,int秒)
。哦,我想问题是为什么date
和其他日期之间有区别,而date2
之间没有区别,date3
和date4
@MaxVollmer是的,我想回答这个问题。没有区别,因为电话可能是为了快。创建实例不需要太多时间。@AxelH是的,但在第一次调用之后的任何连续调用中,创建实例的速度都会更快。查看我的答案。因为您没有使用set
设置毫秒,所以每个gregoriacalendar
都将使用自己的毫秒set(int年,int月,int日期,int小时,int分钟,int秒)
。哦,我想问题是为什么date
和其他日期之间有区别,而date2
之间没有区别,date3
和date4
@MaxVollmer是的,我想回答这个问题。没有区别,因为电话可能是为了快。创建实例不需要太多时间。@AxelH是的,但在第一次调用之后的任何连续调用中,创建实例的速度都会更快。看我的答案。这不是一个重要的问题,这些调用永远不会按顺序进行,而是在不同的时间、不同的请求中进行调用,因此毫秒值更“随机”。这不是一个重要的问题,这些调用永远不会按顺序进行,而是在不同的时间、不同的请求中进行调用,因此毫秒值将更“随机”。