java epoch时间转换器

时间:2016-08-12 15:21:37

标签: java epoch influxdb

我有以下日期:2016-08-08T00:45:02.370294075Z

我正在尝试使用.getMillis()将其转换为纪元,但会导致精度损失:1470617102370。我的目标是将其转换为涌入线格式。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

TL;博士

2016-08-08T00:45:02.370294075Z有纳秒。

2016-08-08T00:45:02.370Z有毫秒。

Instant

Instant类代表UTC时间轴上的一个时刻,分辨率为nanoseconds。所以小数部分最多有九位数。

Instant instant = Instant.parse( "2016-08-08T00:45:02.370294075Z" ) ;

毫秒

Milliseconds的粒度比纳秒级更粗,最多可提供三位小数。所以来自纪元(1970-01-01T00:00:00Z)的extracting a count of milliseconds当然意味着数据丢失,截断6到9位的任何小数位。

long millisecondsSinceEpoch = instant.toEpochMilli() ;  // 2016-08-08T00:45:02.370Z

纳秒

潮流数据似乎写了一个时间戳,从1970年世界贸易组织开始的时代起为几纳秒,尽管文档没有明确说明。

Instant类不会以纳秒为单位从epoch渲染计数,但您可以计算一个。 Instant由epoch加上秒数加上秒数的纳秒数组成。因此,将第一个乘以十亿,再加上第二个。

注意附加到10亿的L将计算转换为long而不是int

long nanosecondsSinceEpoch = ( instant.getEpochSecond() * 1_000_000_000L ) + instant.getNano() ;