Java Date 对象计算错误



以下程序产生不正确的输出:

public class date
{
  public static void main(String[] args)
  {
    Date d1 = new Date(1698526800000L);
    Date d2 = new Date(1698530400000L);
    Date d3 = new Date(1698534000000L);
    Date d4 = new Date(1698537600000L);
    System.out.println(d1);
    System.out.println(d2);
    System.out.println(d3);
    System.out.println(d4);
  }
}

结果:

Sun Oct 29 00:00:00 IDT 2023
Sun Oct 29 01:00:00 IDT 2023
Sun Oct 29 01:00:00 IST 2023
Sun Oct 29 02:00:00 IST 2023

为什么 d2 和 d3 产生相同的日期,尽管给定的 ms 值不同?

编辑:

只想知道为什么会发生这种情况,我发现夏令时是这个原因的罪魁祸首

虽然当你调用toString()Date对象与TimeZone无关(在Java中,date只表示一个时间点(,但它使用平台/系统的默认时区并相应地显示日期/时间。

如果您需要打印具有相同时区的所有日期,则可以在打印日期之前为程序设置default时区(在应用程序启动期间(,例如:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Date d1 = new Date(1698526800000L);
Date d2 = new Date(1698530400000L);
Date d3 = new Date(1698534000000L);
Date d4 = new Date(1698537600000L);
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);

以上应打印具有UTC时区的所有日期。

最新更新