2016-05-06 2 views
3

Я использую ZonedDateTime для анализа и получения текущего времени в соответствии с часовым поясом.ZonedDateTime успешно разбирает, но выводимая строка отличается

При анализе следующих String синтаксический анализ завершается успешно, но результат String отличается. Почему это?

String dateTimeString = "2016-05-04T12:58:22+01:00[Europe/Paris]"; 
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME); 
System.out.println(dateTimeString); 
System.out.println(dateTime.toString()); 

Выход

2016-05-04T12:58:22+01:00[Europe/Paris] 
2016-05-04T12:58:22+02:00[Europe/Paris] 

В какой момент он решил изменить +1 к +2 и почему был брошен не исключение?

Я понимаю, что параметр в parenthese [Europe/Paris] является необязательным, но здесь он имеет приоритет над смещением.

С другой стороны, следующий код

String dateTimeString = "2016-05-04T12:58:22+01:00"; 
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME); 
System.out.println(dateTimeString); 
System.out.println(dateTime.toString()); 

производит вывод

2016-05-04T12:58:22+01:00 
2016-05-04T12:58:22+01:00 

ответ

6

Проблема заключается в том, что 2016-05-04T12:58:22+01:00[Europe/Paris] не правильное время, как у нас CEST (Central European Summer Time, Дневной свет Saving Time) в мае, который начинается в последнее воскресенье марта. Это + 2 часа по сравнению с UTC. Так что действительно 2016-05-04T12:58:22+02:00[Europe/Paris] верен.

Как вы сказали, [Europe/Paris], по-видимому, требует внимания. Не уверен, что в отношении спецификации должно быть исключение, но я сомневаюсь.

Иными словами, 2016-05-04T12:58:22+01:00 не может быть в часах Europe/Paris.

+0

Спасибо за ваш ответ. Я понимаю, что это неправильная дата, почему она успешно анализируется? Это недостаток дизайна. – Olayinka

+2

Я бы предположил, что в спецификации есть определенный приоритет. Но я этого не проверял. – spa

Смежные вопросы