У меня есть дата 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 приложения.
Только для полноты, существует ли способ указать в выражении формата даты для игнорирования символов в последовательности (не делая Обработки строк / замена)? В этом случае я сказал бы, игнорируют любого ':' или просто проигнорируйте часовой пояс все вместе?
RFC822 не позволяет использовать двоеточие в части даты, относящейся к часовому поясу. Он ожидает только 4 цифры. Название этого метода Dojo указывает на то, что он использует RFC3339. Похоже, это практически тот же формат, что и ISO8601 . Так уж получилось, что Joda Time имеет ISODateTimeFormat
, который совместим с ISO8601, если вы можете использовать эту библиотеку. Метод dateTimeNoMillis ()
выглядит как совпадение с форматом Dojo. Это действительно лучше, чем стандартный API даты и времени Java. В противном случае предложение с высоким содержанием кофеина было бы правильным решением.
Обновлено в ответ на обновление Jamen
Есть ли способ заставить Dojo использовать формат, не включающий часовой пояс? Затем вы можете настроить формат на стороне Java, чтобы он соответствовал. Я мало что знаю о Dojo, и мне не удалось найти никакой документации по предоставляемой им функции toRfc3339.
Я бы удалил ':' из часового пояса и использовал бы формат, который вы указали выше.
Это работает
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'.)