【问题标题】:Can the java utc time fit inside a double?java UTC时间可以放在双精度内吗?
【发布时间】:2012-11-25 23:29:52
【问题描述】:

我有一个需要双精度的方法,我想存储 UTC 时间,而我传递给这个方法的变量是一个 long。

我正在使用:

Date now = new Date();
now.getTime() 

获取 UTC 时间。

这个值不能放入双精度数吗?

【问题讨论】:

标签: java utc


【解决方案1】:

它将“适合”,因为double 可以表示任何long 值,但是对于遥远的未来(从现在起的100,000 年)的日期将会有精度损失。

双重使用的 IEEE 754 规范最多仅使用 53 位来表示数字的非指数部分。由于 long 是 64 位,粗略地说,如果 long 值超过 53 位,您可能会丢失精度。

但是,53位可以准确地表示当前epoch millisecond timelong的值,只需要41位。

直到 epoch 时间超过 253 才会发生精度损失,直到 Oct 12 287396 才会发生。

即使在最坏的情况下,11 位“不准确”仍会转换为精度约为 ±1 秒的时间值(2 ^ 11 = 2048,以毫秒为单位的范围为 2 秒)。


简而言之,将一个纪元时间转换为double 是可以的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多