以 Jean-Baptiste Yun\xc3\xa8s和assylias的正确答案为基础,解释 64 位长整数不能Instant将自 1970-01-01T00:00Z\xe2\x80\xa6 以来的所有值表示为纳秒计数
如果我的数学正确的话,您可以使用long/Long表示纳秒数来表示接下来两个世纪的时刻,直到:2262-04-11T23:47:16.854775807Z
Instant.ofEpochSecond( ( Long.MAX_VALUE / 1_000_000_000L ) , ( Long.MAX_VALUE % 1_000_000_000L ) )\nRun Code Online (Sandbox Code Playgroud)\n\n仅供参考,Long.MAX_VALUE= 9223372036854775807。
我并不是说这样做是个好主意。我只是展示展示当前问题的可能性。
\n\n\n\nlong 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 ) ;\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n长.MAX_VALUE:9223372036854775807
\n\n秒:9223372036
\n\n分数:854775807
\n\n总计:9223372036854775807
\n\n即时:2262-04-11T23:47:16.854775807Z
\n
没有这样的方法,因为您无法存储long纳秒内的所有瞬间。
如果您很高兴您感兴趣的日期范围都可以容纳自纪元以来长达纳秒的数据,您可以使用以下方法自行计算:
long nanos = ( instant.getEpochSecond * 1_000_000_000L ) + instant.getNano
Run Code Online (Sandbox Code Playgroud)
请注意,如果日期距过去或将来太远,则会溢出。