为什么以下代码在打印时会返回两个不同的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
为什么打印输出不相同,即使它们同时被调用?
答案 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
。