【问题标题】:Get duration in microseconds以微秒为单位获取持续时间
【发布时间】:2018-04-06 10:26:10
【问题描述】:

考虑例子:

final Duration twoSeconds = Duration.ofSeconds(2);
//      final long microseconds = twoSeconds.get(ChronoUnit.MICROS); throws UnsupportedTemporalTypeException: Unsupported unit: Micros
final long microseconds = twoSeconds.toNanos() / 1000L;
System.out.println(microseconds);

我想知道是否有比手动从纳秒转换更好的方法来获得以微秒为单位的持续时间。

【问题讨论】:

    标签: java-8 duration


    【解决方案1】:

    我不会将java.time API 用于此类任务,因为您可以简单地使用

    long microseconds = TimeUnit.SECONDS.toMicros(2);
    

    来自concurrency API,它从 Java 5 开始就可以使用。

    但是,如果您有一个已经存在的Duration 实例或任何其他原因坚持使用java.time API,您可以使用

    Duration existingDuration = Duration.ofSeconds(2);
    long microseconds = existingDuration.dividedBy(ChronoUnit.MICROS.getDuration());
    

    需要 Java 9 或更新版本

    对于 Java 8,似乎确实没有比 existingDuration.toNanos() / 1000 更好的方法,或者像 TimeUnit.NANOSECONDS.toMicros(existingDuration.toNanos()) 这样结合两个 API。

    【讨论】:

    • .dividedBy(Duration) 甚至无法编译。
    • @CristianBotiza 确实,不知何故,对较新 Java 版本的依赖有所下降。添加了一个说明。感谢您的来信。
    • 感谢您的澄清。看起来我需要迁移到 Java 11+ :)
    【解决方案2】:

    根据 Holger 的回答,我最喜欢的是:

    final long microseconds = TimeUnit.NANOSECONDS.toMicros(twoSeconds.toNanos())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多