大约在 1968 年之前,存在着各种奇怪的抵消现象,尤其是在世界欠发达地区。你没有说你正在使用什么区域设置,但如果是在印度,曾经有一个叫做豪拉标准时间的东西有这种偏移。但我不知道它是否在 1933 年生效。您可能需要下载兹数据库 http://www.twinsun.com/tz/tz-link.htm针对您的区域设置并检查该日期的配置。
编辑:要验证到底发生了什么,请尝试:
GregorianCalendar c = new GregorianCalendar();
TimeZone tz = c.getTimeZone();
System.out.println(tz);
int tzo = tz.getOffset(date.getTime());
System.out.println(
tzo/3600000 + ":" +
(tzo/60000)%60 + ":" +
(tzo/1000)%60 + "." +
tzo%1000);
这将告诉您系统认为当前时区是什么,以及 1933 年有问题的日期上有效的时区偏移。当我在系统中运行此命令时,我得到:
sun.util.calendar.ZoneInfo[id="America/Chicago",offset=-21600000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/Chicago,offset=-21600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
-6:0:0.0
但是,如果我更改一行:
GregorianCalendar c = new GregorianCalendar(TimeZone.getTimeZone("IST"));
然后我得到:
sun.util.calendar.ZoneInfo[id="IST",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
5:53:20.0