准确的系统时间

时间:2016-06-29 17:51:29

标签: java systemtime

在java中获得最准确的系统时间(小时分和秒)的最佳方法是什么?我一直在研究时钟,日期和日历对象。我希望能够以最准确的系统时间为数据包加时间戳并通过网络发送(如果可能,精确到Milli甚至NanoSeconds)。

2 个答案:

答案 0 :(得分:4)

Java 9

java.time框架支持最高nanosecond分辨率的值。这意味着最多九(9)位小数的秒。

Java 9及更高版本中,Clock的新实施可以捕获截至该nanosecond分辨率的当前时刻。但“你的里程可能会有所不同”。实际分辨率和实际精度取决于主机硬件时钟能力。

Instant instant = Instant.now();
  

2016-01-02T12:34:56.123456789Z

Java 8

与Java 9相同,java.time类最多支持nanosecond分辨率。

但目前的时刻只能达到millisecond分辨率。这意味着只有三(3)个或更少的小数秒。此限制是因为Clock使用的旧版实现。

Java 6& 7

与最早版本的Java捆绑在一起的旧日期时间类仅支持毫秒分辨率。其中包括java.util.Datejava.util.Calendarjava.util.GregorianCalendar。这些旧课程设计也很差,令人困惑,也很麻烦。避免它们。

大部分java.time功能都在ThreeTen-Backport项目中反向移植,并在ThreeTenABP项目中进一步适应Android。

据我所知,这些依赖于相同的遗留实现,只有几毫秒的分辨率。

精度

Accuracy and precision始终取决于您的主机硬件时钟功能。

请参阅问题How precise is the internal clock of a modern PC?

据我所知,今天常见的计算机硬件,您不能指望当前时刻将以单纳秒精度捕获。

答案 1 :(得分:-3)

如果你想在纳秒内获得时间意味着使用 system.nanoTime(); 这将是最好的