从GregorianCalendar中减去一天时,小时数已损坏

ser*_*gtk 4 java datetime

我使用以下代码:

Calendar calendar = new GregorianCalendar(0,0,0);
calendar.set(Calendar.YEAR, 1942);
calendar.set(Calendar.MONTH, 3);
calendar.set(Calendar.DAY_OF_MONTH, 4);

Date date1 = calendar.getTime();

calendar.add(Calendar.DAY_OF_MONTH, -1);

Date date2 = calendar.getTime();

System.out.println(date1 + "\n" + date2);
Run Code Online (Sandbox Code Playgroud)

此代码输出如下:

Sat Apr 04 00:00:00 EEST 1942
Fri Apr 03 01:00:00 EEST 1942
Run Code Online (Sandbox Code Playgroud)

实际上我减去1天,时间应该保留.但为什么第二行输出包含1小时的时间应该是0?

编辑:

目前我正在欧洲/赫尔辛基时区测试我的代码.

jar*_*bjo 18

我想你正在使用芬兰时区.在芬兰,1942年通过调整时钟从4月2日23:59:59到4月3日1:00:00引入了夏令时.4月3日0:00:00到0:59:59的时间跨度不存在,因此Java Calendar会尽力而为.