gpt4 book ai didi

java 纪元时间转换器

转载 作者:行者123 更新时间:2023-12-01 09:36:01 25 4
gpt4 key购买 nike

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

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

还有其他办法吗?

最佳答案

tl;博士

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

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

即时

Instant类代表 UTC 时间轴上的一个时刻,分辨率为 nanoseconds 。因此小数部分最多可达九位。

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

毫秒

Milliseconds是比纳秒更粗的粒度,提供最多三位小数。所以extracting a count of milliseconds from epoch (1970-01-01T00:00:00Z) 当然意味着数据丢失,即六到九位的任何十进制数字被截断。

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

纳秒

influxdb 似乎将时间戳写入从 1970 UTC 开始的纳秒数,尽管文档没有明确说明。

Instant 类不会呈现以纳秒为单位的纪元计数,但您可以计算一个。一个Instant由纪元以来的若干个while秒加上若干秒的纳秒组成。因此,将第一个乘以十亿,然后加上第二个。

请注意 10 亿后面附加的 L,以将计算转换为 long 而不是 int

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

关于java 纪元时间转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38921391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com