Парсинг часового пояса RFC822 в Java

У меня есть дата JS, которая преобразовывается Dojo в формат RFC822. Вызов функции - додзе date.toRfc3339 (jsDate), генерирует следующую дату - 2007-02-26T20:15:00+02:00.

У меня есть приложение, которое использует дату Java SimpleDateFormat для парсинга на датах, сгенерированных выше. У меня есть проблемы при парсинге этого формата даты из-за часового пояса. Я попытался использовать

yyyy-mm-DD'T'hh:mm:ssZ

Это перестало работать, поскольку 'Z' для часового пояса не ожидает a ':' символ. Делает любой знает, как я указал бы шаблон для обработки даты RFC822 с ':'?

пересмотр:

Спасибо за то, что правильно интерпретировали то, что я пытаюсь сделать :) Я был предназначен, чтобы сказать, что дата генерирует в RFC3339, и мне был нужен RFC822. Похож я должен буду переопределить JavaScript. Я надеялся, что не должен буду делать этого и мог указать шаблон формата даты, не имея необходимость изменять любой Код Java, поскольку формат даты просто введен в боб Spring приложения.

Только для полноты, существует ли способ указать в выражении формата даты для игнорирования символов в последовательности (не делая Обработки строк / замена)? В этом случае я сказал бы, игнорируют любого ':' или просто проигнорируйте часовой пояс все вместе?

8
задан Richard Harrison 29 July 2012 в 09:00
поделиться

3 ответа

RFC822 не позволяет использовать двоеточие в части даты, относящейся к часовому поясу. Он ожидает только 4 цифры. Название этого метода Dojo указывает на то, что он использует RFC3339. Похоже, это практически тот же формат, что и ISO8601 . Так уж получилось, что Joda Time имеет ISODateTimeFormat , который совместим с ISO8601, если вы можете использовать эту библиотеку. Метод dateTimeNoMillis () выглядит как совпадение с форматом Dojo. Это действительно лучше, чем стандартный API даты и времени Java. В противном случае предложение с высоким содержанием кофеина было бы правильным решением.

Обновлено в ответ на обновление Jamen

Есть ли способ заставить Dojo использовать формат, не включающий часовой пояс? Затем вы можете настроить формат на стороне Java, чтобы он соответствовал. Я мало что знаю о Dojo, и мне не удалось найти никакой документации по предоставляемой им функции toRfc3339.

2
ответ дан 5 December 2019 в 12:08
поделиться

Я бы удалил ':' из часового пояса и использовал бы формат, который вы указали выше.

1
ответ дан 5 December 2019 в 12:08
поделиться

Это работает

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ");
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"));

(Обратите внимание, я убрал последнее двоеточие из формата после спецификатора формата 'Z'.)

3
ответ дан 5 December 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: