【问题标题】:how to convert unix epoch microseconds into Java time stamp如何将 unix 纪元微秒转换为 Java 时间戳
【发布时间】:2019-07-11 21:04:32
【问题描述】:

以微秒为单位的纪元时间:1529948813696000

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

我可以使用这种方法将纪元时间转换为 MilliSeconds

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

需要帮助以微秒为单位转换纪元时间?

【问题讨论】:

  • 您不应该仅仅使用字符串和格式来将 Instant 转换为 Date。只需使用Date parsedDate = Date.from(instant);。文档here.

标签: java unix


【解决方案1】:

虽然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

【讨论】:

  • 是的,我在毫秒和微秒之间有一点间隔,需要更新数学。我应该知道最好不要在不先通过调试器运行的情况下发布代码......:p
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2023-04-09
  • 1970-01-01
  • 2013-01-08
  • 2021-12-11
相关资源
最近更新 更多