我有一个需要双精度的方法,我想存储 UTC 时间,我传递给这个方法的变量很长。
我在用:
Date now = new Date();
now.getTime()
获取UTC时间。
这个值不能放入双精度数吗?
double
从可以代表任何价值的意义上说,它将“适合”,long
但是对于遥远的未来(从现在起的 100,000 年)的日期来说,精度会有所下降。
双重使用的IEEE 754规范最多仅使用 53 位来表示数字的非指数部分。long
由于 long 是 64 位,粗略地说,如果值超过 53 位,您可能会失去精度。
但是 53 位可以准确地表示当前纪元毫秒时间 long
值,只需要 41 位。
直到纪元时间超过 2 53才会发生精度损失,直到Oct 12 287396
.
即使在最坏的情况下,11 位“不准确”仍会转换为精度约为 ±1 秒的时间值(2 ^ 11 = 2048
以毫秒为单位,范围为 2 秒)。
简而言之,将纪元时间转换为double
就可以了。