java微秒转换纳秒 java 微秒 格式_java微秒转换纳秒


Java 9和更高版本:捕获当前时刻时,分辨率高达纳秒。那是9位数的小数。Instant.now()   2017-12-23T12:34:56.123456789Z要限制为微秒,请截断。Instant                // Represent a moment in UTC. .now()                 // Capture the current moment. Returns a Instant object. .truncatedTo(          // Lop off the finer part of this moment.     ChronoUnit.MICROS  // Granularity to which we are truncating. )                      // Returns another Instant object rather than changing the original, per the immutable objects pattern. 2017-12-23T12:34:56.123456Z

在实践中,您将看到用.now现代传统计算机硬件时钟捕获的仅几微秒,而纳秒精度不高。细节从Java 8开始,其他答案有些过时了。java.timeJava 8和更高版本附带了java.time框架。这些新类取代了Java最早版本(例如java.util.Date/.Calendar和java.text.SimpleDateFormat)附带的有缺陷的麻烦的日期时间类。该框架由受Joda-Time启发的JSR 310定义,并由ThreeTen-Extra项目扩展。java.time中的类解析为纳秒,比旧的日期时间类和Joda-Time所使用的毫秒要细得多。并且比问题中要求的微秒更好。在此处输入图片说明Clock 实作尽管java.time类支持表示以纳秒为单位的值的数据,但这些类尚未生成以纳秒为单位的值。这些now()方法使用与旧的日期时间类相同的旧时钟实现System.currentTimeMillis()。我们Clock在java.time中具有新接口,但是该接口的实现是相同的旧毫秒时钟。因此,您可以设置结果的文本表示的格式,ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )以查看小数秒的9位数字,但只有前三位具有以下数字:2017-12-23T12:34:56.789000000ZJava 9中的新时钟Java 9的OpenJDK和Oracle实现具有Clock粒度更细的新默认实现,最高可达java.time类的纳秒级能力。请参见OpenJDK问题,提高java.time.Clock.systemUTC()的实现精度。该问题已成功实施。2017-12-23T12:34:56.123456789Z在装有macOS Sierra的MacBook Pro(15英寸,2013年末,视网膜)上,我得到的当前时刻以微秒为单位(最多六位数的十进制分数)。2017-12-23T12:34:56.123456Z硬件时钟请记住,即使采用新的更精细的Clock实现,您的结果也可能因计算机而异。Java依靠底层计算机硬件的时钟来了解当前时刻。硬件时钟的分辨率差异很大。例如,如果特定计算机的硬件时钟仅支持微秒粒度,则任何生成的日期时间值将只有六位数的分数秒,最后三位数为零。硬件时钟的精度差异很大。仅仅因为时钟生成的值带有几分之一秒的小数位,所以这些数字可能不准确,仅是近似值,会从原子钟读取的实际时间中漂移。换句话说,仅仅因为您看到小数点右边的一堆数字并不意味着您可以相信两次读数之间的经过时间是正确的。