Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期始终获取不同的getTime()_Java_Date - Fatal编程技术网

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是的,但在第一次调用之后的任何连续调用中,创建实例的速度都会更快。看我的答案。这不是一个重要的问题,这些调用永远不会按顺序进行,而是在不同的时间、不同的请求中进行调用,因此毫秒值更“随机”。这不是一个重要的问题,这些调用永远不会按顺序进行,而是在不同的时间、不同的请求中进行调用,因此毫秒值将更“随机”。