java 微秒 时间_Java中的当前时间(以微秒为单位)

Java9引入了更精确的时钟实现,能够以纳秒级别捕获当前时刻。虽然硬件时钟可能只支持微秒,但可以使用`Instant.now().truncatedTo(ChronoUnit.MICROS)`来截断到微秒。Java8之前的日期时间类通常使用毫秒精度。Java9的OpenJDK和Oracle实现提供了纳秒级的Clock,但实际精度取决于硬件时钟。
摘要由CSDN通过智能技术生成

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.time

Java 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.789000000Z

Java 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依靠底层计算机硬件的时钟来了解当前时刻。

硬件时钟的分辨率差异很大。例如,如果特定计算机的硬件时钟仅支持微秒粒度,则任何生成的日期时间值将只有六位数的分数秒,最后三位数为零。

硬件时钟的精度差异很大。仅仅因为时钟生成的值带有几分之一秒的小数位,所以这些数字可能不准确,仅是近似值,会从原子钟读取的实际时间中漂移。换句话说,仅仅因为您看到小数点右边的一堆数字并不意味着您可以相信两次读数之间的经过时间是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值