为什么Instant会在彼此之后打印时显示不同的值?

时间:2018-01-10 12:40:56

标签: java date time java-time

为什么以下代码在打印时会返回两个不同的Instant值?

Timestamp currentTime = Timestamp.from(Instant.now());

System.out.println(currentTime.toInstant());
System.out.println(Instant.now());

当同时打印出上述两行时,它会给我:

  

2018-01-10T12:22:46.168Z

     

2018-01-10T12:22:46.236Z

为什么打印输出不相同,即使它们同时被调用?

3 个答案:

答案 0 :(得分:4)

每次调用System.currentTimeMillis()Instant.now()等API时,都会获得调用时的确切值。

每条指令的时间过去了。您的处理器由Java虚拟机驱动,执行代码,一个接一个指令,并且需要一些时间。

计算机科学没有什么是瞬间的,你刚刚发现了。

答案 1 :(得分:3)

每次调用Instant.now()都会返回一个新的Instant实例,其中包含不同的时间,因为两次调用之间的时间过去了。

如果您使用相同的实例,您将看到相同的输出:

Instant now = Instant.now();
Timestamp currentTime = Timestamp.from(now);
System.out.println(currentTime.toInstant());
System.out.println(now);

答案 2 :(得分:0)

Instant.now()调用您的操作系统,然后读取硬件时钟以获取当前时间。这些操作需要时间,并且通常比预期的时间更长。 68毫秒(两次之间的差异)听起来不合理。

BTW,Basil Bourque在his comment中是正确的,当你可以使用现代Instant课程时,没有理由你也应该使用过时的Timestamp