我有以下日期:2016-08-08T00:45:02.370294075Z
我正在尝试使用.getMillis()
将其转换为纪元,但会导致精度损失:1470617102370
。我的目标是将其转换为涌入线格式。
还有其他办法吗?
答案 0 :(得分:1)
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() ;