以下程序产生不正确的输出:
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
时区的所有日期。