带有日期的负参数的奇怪结果

  • 本文关键字:结果 参数 日期 java date
  • 更新时间 :
  • 英文 :


考虑以下程序

Date date1 = new Date(-124304227239000L);
Date date2 = new Date(0);
System.out.println(date1 + " vs. " + date2);
结果(至少在我的计算机上使用Java 8,在另一台计算机上使用Java 11):
Sun Jan 01 16:59:21 CET 1970 vs. Thu Jan 01 01:00:00 CET 1970

这看起来很奇怪,因为根据文档(https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date-long-), Date作为参数的负值表示1970年之前的日期。相反,我得到的是星期天而不是星期四,但仍然是1970年。

有谁能给我解释一下吗?

您提供的值大约是公元前1969/1970年,这取决于您是否进行格里历/儒略历转换。Date.toString(),除了它所有的其他问题,懒得提到时代。

如果您使用具有相同值的Instant,则更清楚:

Instant instant = Instant.ofEpochMilli(-124304227239000L);
System.out.println(instant);

输出:

-1970-12-15T15:59:21Z

我可以从中得出以下结论:

  • 当使用很久以前的值时,有很多需要考虑的因素,包括文本表示和日历系统
  • 尽量避免使用java.util.Date

相关内容

  • 没有找到相关文章

最新更新