gpt4 book ai didi

java - 为什么 Java 中的 new java.util.Date(Long.MIN_VALUE) 等于 "Sun Dec 02 11:47:04 EST 292269055"?

转载 作者:行者123 更新时间:2023-12-04 20:39:50 24 4
gpt4 key购买 nike

如标题所示,在 Java 中,如果我这样做

System.out.print(new java.util.Date(Long.MAX_VALUE));
System.out.print(new java.util.Date(0));
System.out.print(new java.util.Date(-86400000));
System.out.print(new java.util.Date(Long.MIN_VALUE));

我得到输出

Sun Aug 17 02:12:55 EST 292278994
Wed Dec 31 19:00:00 EST 1969
Tue Dec 30 19:00:00 EST 1969
Sun Dec 02 11:47:04 EST 292269055

所以年份值变为 Long.MAX_VALUE > Long.MIN_VALUE > 0 > -86400000?发生了什么?为什么 Date(Long.MIN_VALUE) 不是负年份?

搜索,我无法找到与此相关的任何信息,Java 文档也没有提及任何相关信息。

我正在使用 Java 8。

此外,执行以下操作

(new java.util.Date(Long.MIN_VALUE).getYear() >= new java.util.Date(0).getYear())

返回 true,但是

(new java.util.Date(Long.MIN_VALUE).after(new java.util.Date(0)))

返回 false?

最佳答案

首先要做的事情:以下

 Long.MIN_VALUE > -86400000

评估为 false

另一方面,Date 类中构造函数的负值表示日历中“纪元”之前的日期,即 1970 年 1 月 1 日,格林威治标准时间 00:00:00。。 p>

因此,使用 Long.MIN_VALUE 构造的日期是一种回到过去的方式。更改打印 Date 的方式可能会帮助您发现问题……

    System.out.println(new SimpleDateFormat("dd.MM.yyyy GG HH:mm:ss.SSS").format(new Date(Long.MAX_VALUE / 1000)));
System.out.println(new SimpleDateFormat("dd.MM.yyyy GG HH:mm:ss.SSS").format(new Date(0)));
System.out.println(new SimpleDateFormat("dd.MM.yyyy GG HH:mm:ss.SSS").format(new Date(-86400000)));
System.out.println(new SimpleDateFormat("dd.MM.yyyy GG HH:mm:ss.SSS").format(new Date(Long.MIN_VALUE)));
System.out.println(Long.MIN_VALUE > -86400000);

所以,new Date(Long.MIN_VALUE) 是基督之前的一个日期。

格式化程序模式非常有助于识别此类 Blob 。

在这种情况下,G 表示纪元指示符,所有模式指示符都是here .

关于java - 为什么 Java 中的 new java.util.Date(Long.MIN_VALUE) 等于 "Sun Dec 02 11:47:04 EST 292269055"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43473059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com