【问题标题】:When will the java date collapse?java日期什么时候崩溃?
【发布时间】:2011-05-10 20:24:06
【问题描述】:

AFAIK java 以毫秒为单位存储长变量中的日期。因此,某天将没有对应于该时刻的值(因为 long 具有最大值)。你知道什么时候会发生吗?

【问题讨论】:

标签: java datetime


【解决方案1】:

很容易找到:

public class Test {
    public static void main(String[] args) {
        System.out.println(new java.util.Date(Long.MAX_VALUE));
    }
}

提供输出(在我的盒子上):

Sun Aug 17 07:12:55 GMT 292278994

您可能需要从 Long.MAX_VALUE 中减去一点,以应对您的时区溢出 long 的范围,但它会给出一个合理的范围 :)

【讨论】:

  • 我也喜欢它 :-) 它甚至给出了它会打破的第二个;)
  • 不,不,不......它在发布时间后中断一毫秒。如果它显示的是毫秒,那就是。
【解决方案2】:

根据现行的leap-year 规定,每年的平均天数为

         365 + 1/4 − 1/100 + 1/400 = 每年 365.2425 天

这意味着我们平均每年有 31556952000 毫秒。

long-value 表示自Epoch(1970 年 1 月 1 日)以来的毫秒数,Java long 表示的最大数为 263 - 1,因此以下计算

         1970 + (263 − 1) / 31556952000

表明此表示将在 292278994 年溢出。


这可以由Jon Skeet points out 确认

-> System.out.println(new Date(Long.MAX_VALUE));
Sun Aug 17 08:12:55 CET 292278994

【讨论】:

  • 由于日期如此之大,闰秒和潮汐加速度可能也需要考虑在内。
  • @Qwerky,是的,我也想到了这一点,并搜索了一年中毫秒数的天文测量值,但后来我突然想到这个问题是关于 java 日期实现的,并且这很可能考虑潮汐加速等:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多