如何获取微秒级精度的当前时间

How to get the current time of microsecond accuracy

如何在Java8中获取微秒精度的当前时间?

String pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern, Locale.getDefault())
                                                       .withZone(ZoneId.systemDefault());
System.out.println(LocalDateTime.now().format(dateTimeFormatter));

Java9以上都可以,怎么办Java8?

tl;博士

Java 9+ 以微秒为单位捕获当前时刻,而 Java 8 以毫秒为单位捕获当前时刻。

ZonedDateTime
.now()  // Uses JVM’s current default time zone.
.format(
    DateTimeFormatter
    .ofLocalizedDateTime( FormatStyle.FULL ) // Uses JVM’s current default locale.
)

ZonedDateTime.now

我无法想象调用 LocalDateTime.now() 是正确做法的场景。 class 不能代表一个时刻,因为它缺少时区或偏移量的上下文。使用 ZonedDateTime.

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.systemDefault() ) ;

在Java8中,这一刻被捕捉到了毫秒级的分辨率。在 Java 9+ 中,微秒。在所有版本中,java.time 类型都能够表示纳秒,但传统计算机缺乏硬件时钟来准确捕获以纳为单位的当前时刻。

生成表示对象值的文本,采用标准 ISO 8601 格式,通过在方括号中附加时区名称进行扩展。

String output = zdt.toString() ;

生成本地化文本。

Locale locale = Locale.CANADA_FRENCH ;  // Or Locale.getDefault()
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG ).withLocale( locale ) ;
String output = zdt.format( f ) ;