При тестировании моего приложения у меня возникла странная проблема. Когда я помещаю дату, имеющую год до 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
Здесь снова говорится IST
, но показывает +0553
. Не должно быть +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, и если это известная проблема, каково возможное обходное решение для нее.
Спасибо заранее.