在测试我的应用程序时,我遇到了一个奇怪的问题。当我输入一个1945年之前的日期时,它会改变时区。
我有一个简单的程序来展示这个问题。
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
Calendar calendar = Calendar.getInstance();
System.out.println("**********Before 1945");
calendar.set(1943, Calendar.APRIL, 12, 5, 34, 12);
System.out.println(format.format(calendar.getTime()));
System.out.println(calendar.getTime());
System.out.println("**********After 1945");
calendar.set(1946, Calendar.APRIL, 12, 5, 34, 12);
System.out.println(format.format(calendar.getTime()));
System.out.println(calendar.getTime());
}
我收到的输出如下:-**********Before 1945
1943-04-12 05:34:12+0630
Mon Apr 12 05:34:12 IDT 1943
**********After 1945
1946-04-12 05:34:12+0530
Fri Apr 12 05:34:12 IST 1946
对于第一个,我得到的是+0630
和IDT
,而对于第二个,我得到了+0530
和IST
,这是预期的。
编辑:
在查看 @Elliott Frisch 的答案后,我尝试了1942年之前的日期:
calendar.set(1915, Calendar.APRIL, 12, 5, 34, 12);
System.out.println(format.format(calendar.getTime()));
System.out.println(calendar.getTime());
输出:-
1915-04-12 05:34:12+0553
Mon Apr 12 05:34:12 IST 1915
再次提醒,这里显示的是+0553
,但标注的是IST
。应该是+0530
才对。
为了进行比较,我尝试了同样的事情在javascript中:
new Date("1946-04-12 05:34:12") //prints Fri Apr 12 1946 05:34:12 GMT+0530 (IST)
new Date("1943-04-12 05:34:12") //prints Fri Apr 12 1943 05:34:12 GMT+0530 (IST)
new Date("1915-04-12 05:34:12") //prints Mon Apr 12 1915 05:34:12 GMT+0530 (IST)
这很好用。 我想知道为什么Java会受到影响,如果这是一个已知的问题,可能有什么解决方法。
提前感谢。