java获取时间精度,现在用Java获取当前时间精度(微秒)的任何​​新方法?

I checked the below page that there is no method to get current time with accuracy in microsecond in Java in 2009.

Current time in microseconds in java

The best one is System.currentTimeMillis() which gives current time with accuracy in millisecond, while System.nanoTime() gives the current timestamp with accuracy in nanoseconds, but this timestamp could not be used to convert to current time with high accuracy.

May I know if there is any new update in this for Java after 6 years? Thanks.

Edit 1. System.nanoTime() is useful for estimating duration, but not giving current time.

Edit 2. It is good to have solutions in Java 8. Is there any other way to do it in Java 7? Thanks!

解决方案

tl;dr

Instant.now()

2018-03-09T21:03:33.831515Z

Using Java 9 and later, you can likely capture the current moment with microseconds resolution.

Example seen above is Oracle Java 9.0.4 for macOS Sierra. Note the 6 digits of fractional second, meaning microseconds.

java.time

The java.time framework built into Java 8 and later has classes to represent date-time values with a resolution of nanoseconds, 9 digits of a decimal fraction of a second.

Java 9

Java 9 has a fresh implementation of Clock with up to nanosecond resolution. Actual values depend on the limits of the underlying hardware clock of any particular computer.

Avoid the older date-time classes. The classes such as java.util.Date/.Calendar bundled with early versions of Java have only millisecond resolution. Same for Joda-Time. Both are supplanted by the java.time classes.

Java 8

Java 8 implements the Clock interface with only millisecond resolution (3 digits of a fractional second). So while the java.time classes are capable of carrying nanoseconds, it is not able to capture the current time with nanoseconds.

Native code

Perhaps you could write or find an implementation of Clock that makes a call to a native library in the host OS to get a more accurate time.

Database

If you happen to be using a database already, you could ask it for the time. As of JDBC 4.2 and later, you can directly exchange java.time objects with your database.

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

Prior to JDBC 4.2, you could go through the troublesome legacy java.sql.Timestamp that carries nanosecond resolution. For example, Postgres provides microsecond resolution (assuming the host computer clock supports that), 6 digits of a fractional second. You can convert from a java.sql.Timestamp to an Instant and ZonedDateTime using new methods added to the old classes.

9eaXs.png

About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.

You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.* classes.

Where to obtain the java.time classes?

Java SE 8, Java SE 9, and later

Built-in.

Part of the standard Java API with a bundled implementation.

Java 9 adds some minor features and fixes.

Java SE 6 and Java SE 7

Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.

Android

Later versions of Android bundle implementations of the java.time classes.

For earlier Android (<26), the ThreeTenABP project adapts ThreeTen-Backport (mentioned above). See How to use ThreeTenABP….

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值