我有一个方法需要一个double类型的参数,而我想要存储UTC时间,但我传递给该方法的变量是一个long类型。
我正在使用:
Date now = new Date();
now.getTime()
获取UTC时间。
这个值是否不能适应double类型?
对于 double
类型, 任何 long
值都可以被“容纳”,但是对于遥远的未来(距离现在数十万年之后)的日期,会有精度损失。
IEEE 754 规范,即 double
使用的规范,最多只使用 53 位表示数字的非指数部分。由于 long 是 64 位,粗略地说,如果 long
值超过 53 位,则可能会丢失精度。
然而,53 位足以准确表示当前的时期毫秒时间 long
值,仅需要 41 位即可。
只有当时期时间超过 253 时才会发生精度损失,这将不会发生直到 Oct 12 287396
。
即使在最坏的情况下,“不准确”的 11 位仍将转换为精度约为±1秒的时间值 (2 ^ 11 = 2048
,以毫秒为单位的范围为 2 秒)。
简而言之,将时期时间转换为double
类型是可以的。