LocalDateTime 作为总纳秒

tim*_*ord 5 java time scala date

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

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

例如:

localDateTime.toInstant(ZoneOffset.UTC).getNano

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

类似于toEpochSecond纳秒,但不是以秒为单位?

Bas*_*que 5

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

\n\n

以 Jean-Baptiste Yun\xc3\xa8sassylias的正确答案为基础,解释 64 位长整数不能Instant将自 1970-01-01T00:00Z\xe2\x80\xa6 以来的所有值表示为纳秒计数

\n\n

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

\n\n
Instant.ofEpochSecond( ( Long.MAX_VALUE / 1_000_000_000L ) , ( Long.MAX_VALUE % 1_000_000_000L ) )\n
Run Code Online (Sandbox Code Playgroud)\n\n

仅供参考,Long.MAX_VALUE= 9223372036854775807。

\n\n

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

\n\n

查看IdeOne.com 上实时运行的代码

\n\n
long seconds = ( Long.MAX_VALUE / 1_000_000_000L ) ;\nlong fraction = ( Long.MAX_VALUE % 1_000_000_000L ) ;\nlong total = ( ( seconds * 1_000_000_000L ) + fraction ) ; \nInstant instant = Instant.ofEpochSecond( seconds , fraction ) ;\n\nSystem.out.println( "Long.MAX_VALUE: " + Long.MAX_VALUE ) ;\nSystem.out.println( "seconds: " + seconds ) ;\nSystem.out.println( "fraction: " + fraction ) ;\nSystem.out.println( "total: " + total ) ;\nSystem.out.println( "instant: " + instant ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

长.MAX_VALUE:9223372036854775807

\n\n

秒:9223372036

\n\n

分数:854775807

\n\n

总计:9223372036854775807

\n\n

即时:2262-04-11T23:47:16.854775807Z

\n
\n


ass*_*ias 3

没有这样的方法,因为您无法存储long纳秒内的所有瞬间。

如果您很高兴您感兴趣的日期范围都可以容纳自纪元以来长达纳秒的数据,您可以使用以下方法自行计算:

long nanos = ( instant.getEpochSecond * 1_000_000_000L ) + instant.getNano
Run Code Online (Sandbox Code Playgroud)

请注意,如果日期距过去或将来太远,则会溢出。