Java日期何时崩溃?

2022-09-02 14:18:35

AFAIK java将长变量中的日期存储为毫秒。因此,总有一天不会有值(因为长线有一个最大值)将对应于该瞬间的时间。你知道什么时候会发生吗?


答案 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


答案 2

根据现行的闰年规定,每年的平均天数将为

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

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

long 值表示自 Epoch(1970 年 1 月 1 日)以来的毫秒数,Java long 表示的最大数字是 263 − 1,因此进行以下计算

1970 + (263 − 1) / 31556952000

显示此表示形式将在第 292278994 年溢出。


正如Jon Skeet所指出的那样,这可以通过以下方式得到证实:

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