Разбор строки с помощью DateTimeFormatter.forPattern

#java #parsing #datetime #jodatime

#java #синтаксический анализ #дата-время #jodatime

Вопрос:

У меня есть строка:

 Sun May 15 00:00:00 IST 2011
  

Теперь, если я хочу разобрать ее в joda DateTime по шаблону:

 EEE MMM dd 00:00:00 z yyyy
  

Я получаю:

 java.lang.IllegalArgumentException: Invalid format: "Sun May 15 00:00:00 IST 2011" is malformed at " 00:00:00 IST 2011"
  

Но SimpleDateFormat с тем же шаблоном может разобрать эту строку в java.util.Date. Что я делаю не так?

Спасибо и с уважением.

Комментарии:

1. вы уверены, что не указали HH:mm:ss при использовании SimpleDateFormat ?

2. @asgs да, шаблон одинаков для обоих средств форматирования.

Ответ №1:

JODA не поддерживает синтаксический анализ названий часовых поясов.

Из документации API:

Названия зон: названия часовых поясов (‘z’) не могут быть проанализированы.

Комментарии:

1. Спасибо. Итак, чтобы разобрать эту строку, я должен разобрать ее в Date с помощью SimpleDateFormat, а затем создать экземпляр DateTime с этой даты?

2. Вероятно, лучшим подходом было бы изменить формат вашей строки временной метки. Проблема в том, что названия часовых поясов неоднозначны, например, «IST» используется для ирландского летнего времени, израильского стандартного времени и индийского стандартного времени. Даже если вы используете java.util.SimpleDateFromat, вы не можете быть уверены, что действительно получите то, что ожидаете.