【问题标题】:How to get the current time of microsecond accuracy如何获得微秒精度的当前时间
【发布时间】:2022-01-13 05:21:44
【问题描述】:

Java 8 中如何获取当前时间的微秒精度?

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));

Java 9 以上都可以,Java 8 怎么办?

【问题讨论】:

  • 字符串模式 = "yyyy-MM-dd HH:mm:ss.SSSSSS";
  • 这能回答你的问题吗? Current time in microseconds in java
  • 您提到的 Java 9 方式是什么?你能告诉我们你的意思(代码)吗?

标签: java java-8


【解决方案1】:

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() 是正确的做法。该类不能代表一个时刻,因为它缺少时区或偏移量的上下文。使用ZonedDateTime

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

在 Java 8 中,以毫秒为分辨率捕获时刻。在 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 ) ;

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多