如何从纪元微秒或纳秒创建Java Instant?

时间:2019-05-09 16:32:20

标签: java timestamp

我正在尝试为我的项目标准化时间戳格式,其中源以微秒为单位进行报告。我试图找出是否有一种不需要使用手写常量的简单方法。

1 个答案:

答案 0 :(得分:1)

感谢您的建议。这是我能想到的最干净的方法:

static Instant getInstantFromMicros(Long microsSinceEpoch) {
  return Instant.ofEpochSecond(TimeUnit.MICROSECONDS.toSeconds(microsSinceEpoch), TimeUnit.MICROSECONDS.toNanos(Math.floorMod(microsSinceEpoch, TimeUnit.SECONDS.toMicros(1))));
}

static Instant getInstantFromNanos(Long nanosSinceEpoch) {
  return Instant.ofEpochSecond(0L, nanosSinceEpoch);
}

测试用例:

System.out.println(getInstantFromMicros(1_500_000_000_123_456L));
// 2017-07-14T02:40:00.123456Z

System.out.println(getInstantFromNanos(1_500_000_000_123_456_789L));
// 2017-07-14T02:40:00.123456789Z