java日期什么时候会崩溃?

Den*_* S. 18 java datetime

AFAIK java以长度变量存储日期,以毫秒为单位.因此有一天将没有价值(因为长期有一个最大值),这将对应于该瞬间的时间.你知道什么时候会发生吗?

Jon*_*eet 56

很容易找到:

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

给出输出(在我的盒子上):

Sun Aug 17 07:12:55 GMT 292278994
Run Code Online (Sandbox Code Playgroud)

你可能需要减去一点Long.MAX_VALUE来应对你的时区溢出的范围很长,但它会给出一个合理的球场:)

  • 不,不,不...它会在发布时间后突破一毫秒.如果它显示毫秒,那就是. (4认同)

aio*_*obe 26

根据目前的闰年规定,每年的平均天数将是

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

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

长值表示自Epoch(1970年1月1日)以来的毫秒数,并且Java long表示的最大数字是2 63 - 1,因此以下计算

         1970 +(2 63 - 1)/ 31556952000

显示这种表示将溢出292278994年.


正如Jon Skeet指出的那样,这可以得到确认

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

  • 我的上帝,我希望有人在那时重写了我的代码.:) (4认同)
  • 使用如此大的数字作为日期,闰秒和潮汐加速度可能也需要考虑在内。 (2认同)
  • @Qwerky,是的,我也考虑过这一点,并搜索了一年中毫秒数的天文测量值,但后来我突然想到这个问题是关于 java 日期实现的,这很可能 * 不 *潮汐加速度等考虑在内:-) (2认同)