gpt4 book ai didi

java - LocalDateTime 作为总纳秒

转载 作者:行者123 更新时间:2023-11-30 06:46:02 26 4
gpt4 key购买 nike

我正在使用 LocalDateTime 对象,并希望将它们存储为 Long,精度为纳秒级。

我已经尝试在 Instant 表示之间进行转换,但到目前为止都失败了。

例如:

localDateTime.toInstant(ZoneOffset.UTC).getNano

仅返回 localDateTime 的纳秒部分 - 有没有办法以纳秒为单位返回完整值?

类似于 toEpochSecond 但不是秒,而是纳秒?

最佳答案

2262-04-11T23:47:16.854775807Z = Long.MAX_VALUE 纳米级

以正确答案为基础 by Jean-Baptiste Yunèsby assylias解释 64 位长整数不能将所有 Instant 值表示为自 1970-01-01T00:00Z 以来的纳秒数......

您可以使用 long/Long 来表示接下来两个世纪的纳秒计数,直到 2262-04-11T23:47 :16.854775807Z,如果我的数学是正确的:

Instant.ofEpochSecond( ( Long.MAX_VALUE / 1_000_000_000L ) , ( Long.MAX_VALUE % 1_000_000_000L ) )

仅供引用,Long.MAX_VALUE = 9223372036854775807。

我并不是说这样做是个好主意。我只是展示了展示手头问题的可能性。

参见 code run live at IdeOne.com .

long seconds = ( Long.MAX_VALUE / 1_000_000_000L ) ;
long fraction = ( Long.MAX_VALUE % 1_000_000_000L ) ;
long total = ( ( seconds * 1_000_000_000L ) + fraction ) ;
Instant instant = Instant.ofEpochSecond( seconds , fraction ) ;

System.out.println( "Long.MAX_VALUE: " + Long.MAX_VALUE ) ;
System.out.println( "seconds: " + seconds ) ;
System.out.println( "fraction: " + fraction ) ;
System.out.println( "total: " + total ) ;
System.out.println( "instant: " + instant ) ;

Long.MAX_VALUE: 9223372036854775807

seconds: 9223372036

fraction: 854775807

total: 9223372036854775807

instant: 2262-04-11T23:47:16.854775807Z

关于java - LocalDateTime 作为总纳秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48077686/

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