如何将Unix纪元微秒转换为Java时间戳

时间:2019-07-11 21:04:32

标签: java unix

每秒钟的上调时间:1529948813696000

如何将其转换为Java时间戳。

我可以使用这种方法以毫秒为单位转换时间

Instant instant = Instant.ofEpochMilli(Long.parseLong("1529957592000"));
Date parsedDate = dateFormat.parse(instant.atZone(ZoneId.of("America/Chicago")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")).toString())

是否需要转换以微秒为单位的纪元时间?

1 个答案:

答案 0 :(得分:7)

虽然Instant类没有ofEpochNano(long)方法,但确实有ofEpochSecond(long, long)重载,它接受了一个纳秒级的偏移量和历元秒。

只需一点数学,您就可以将纪元微秒转换为秒加偏移量,并使用它来创建Instant,就像这样:

long epochMicroSeconds = 1_529_948_813_696_123L;
long epochSeconds = epochMicroSeconds / 1_000_000L;
long nanoOffset = ( epochMicroSeconds % 1_000_000L ) * 1_000L ;
Instant instant = Instant.ofEpochSecond( epochSeconds, nanoOffset ) ;

请参阅此code run live at IdeOne.com

  

instant.toString():2018-06-25T17:46:53.696123Z