在java中获得最准确的系统时间(小时分和秒)的最佳方法是什么?我一直在研究时钟,日期和日历对象。我希望能够以最准确的系统时间为数据包加时间戳并通过网络发送(如果可能,精确到Milli甚至NanoSeconds)。
答案 0 :(得分:4)
java.time框架支持最高nanosecond分辨率的值。这意味着最多九(9)位小数的秒。
在Java 9及更高版本中,Clock
的新实施可以捕获截至该nanosecond分辨率的当前时刻。但“你的里程可能会有所不同”。实际分辨率和实际精度取决于主机硬件时钟能力。
Instant instant = Instant.now();
2016-01-02T12:34:56.123456789Z
与Java 9相同,java.time类最多支持nanosecond分辨率。
但目前的时刻只能达到millisecond分辨率。这意味着只有三(3)个或更少的小数秒。此限制是因为Clock
使用的旧版实现。
与最早版本的Java捆绑在一起的旧日期时间类仅支持毫秒分辨率。其中包括java.util.Date
,java.util.Calendar
和java.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(); 这将是最好的