时间在 Java 中签名很长,所以它也是 63 位的。
所以你担心今年你会溢出吗?就个人而言,我认为到那时没有人会使用 Java。事实上,到那时我们也很可能会灭绝/进化。
System.out.println("Overflow at " + new Date(Long.MAX_VALUE));
印刷
Overflow at Sun Aug 17 08:12:55 CET 292278994
注:2.92亿年前是恐龙统治地球之前。
如果您担心将纳秒时间戳转换为双倍的精度损失,您可以计算出该误差是多少
long now = System.currentTimeMillis() * 1000000L;
double error_f = Math.ulp((float) now);
double error = Math.ulp((double) now);
System.out.println("The error for a nano-second timestamp using a double "
+ now + " is " + error + " and float is " + error_f);
印刷
The error for a nano-second timestamp using a double 1378970569656000000 is 256.0 and float is 1.37438953472E11
这意味着转换为的误差double
最多为 128 ns 的一半,转换为浮点数的误差也是 ulp 的一半,即 68 秒,这是相当高的。