java - 现在有什么新方法可以在 Java 中以微秒为单位准确获取当前时间?

标签 java time java-7

我检查了下面的页面,在 2009 年的 Java 中没有方法可以精确地以微秒为单位获取当前时间。
Current time in microseconds in java

最好的是 System.currentTimeMillis() ,它给出当前时间,精度为毫秒,而 System.nanoTime() 给出当前时间戳,精度为纳秒,但是这个时间戳不能用来转换为当前时间,精度很高准确性。

我想知道 Java 6 年后是否有任何新的更新?谢谢。

编辑 1. System.nanoTime() 对于估计持续时间很有用,但不能给出当前时间。

编辑 2. 在 Java 8 中有解决方案很好。在 Java 7 中还有其他方法吗?谢谢!

最佳答案

tl;dr

Instant.now()

2018-03-09T21:03:33.831515Z

使用 Java 9之后,您可能可以使用 microseconds 捕捉当前时刻分辨率。

上面看到的例子是 Oracle Java 9.0.4 for macOS Sierra .注意小数秒的 6 位,表示微秒。


java.time

内置于 Java 8 及更高版本中的 java.time 框架具有表示分辨率为 nanoseconds 的日期时间值的类。 , 秒的小数点后 9 位。

Java 9

Java 9 有一个 fresh implementation Clock 分辨率高达纳秒级。实际值取决于任何特定计算机的底层硬件时钟的限制。

有关更多信息,请参阅问题,Why does the new Java 8 Date Time API not have nanosecond precision? .

避免使用较旧的日期时间类。 java.util.Date/.Calendar 等与早期版本的 Java 捆绑在一起的类只有毫秒分辨率。同样适用于 Joda-Time .两者都被 java.time 类取代。

Java 8

Java 8 实现了 Clock仅与 millisecond 接口(interface)分辨率(小数秒的 3 位数字)。因此,虽然 java.time 类能够携带纳秒,但它无法捕获纳秒的当前时间。

原生代码

也许您可以编写或找到 Clock 的实现调用主机操作系统中的 native 库以获得更准确的时间。

数据库

如果您碰巧已经在使用数据库,您可以询问它的时间。从 JDBC 4.2 及更高版本开始,您可以直接与数据库交换 java.time 对象。

Instant instant = myPreparedStatement.getObject( … , Instant.class ) ;

在 JDBC 4.2 之前,您可能会遇到麻烦的遗留 java.sql.Timestamp,它具有纳秒分辨率。例如,Postgres提供 microsecond分辨率(假设主机时钟支持),小数秒的 6 位数字。您可以使用添加到旧类的新方法将 java.sql.Timestamp 转换为 InstantZonedDateTime

enter image description here


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 和 JPA 2.2 支持 java.time

从哪里获取 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 现在有什么新方法可以在 Java 中以微秒为单位准确获取当前时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33472569/

相关文章:

java - 遍历 hashmap - 抛出异常

java - LinkedHashSet 从某个元素开始循环 (Java)。

java - 在eclipse中运行maven项目的问题,不被识别为Java项目

c - Clock() 的数据类型是什么?

java - 自签名 (jdk 7u45) Applet 在 Firefox 和 chrome 中通过 SSL 运行时出现 NullPointerException

java - 提高 Java 中字符串连接的性能

java - Libgdx 获取音乐的持续时间

php - 这是什么类型的时间戳,我需要将其转换为人类可读的时间戳

JAVA 7 监视服务

java - Java 7 中的链式调用?