Я использую время joda для форматирования входной строки даты ISO, но получаю исключение, что моя дата ISO искажена:
Invalid format: "2014-06-20T11:41:08+02:00" is malformed at "+02:00"
Это мой код:
val formatter: DateTimeFormatter = ISODateTimeFormat.dateTime.withZone(DateTimeZone.getDefault)
val date: DateTime = formatter.parseDateTime("2014-06-20T11:41:08+02:00")
Что здесь не так?
Ответ 1 · рейтинг 7 · Norbert Radyk
Комментарий к ошибке здесь немного вводит в заблуждение, поскольку модуль форматирования Joda, который вы получаете от ISODateTimeFormat, ожидает присутствия миллисекундной части строки даты/времени, поэтому следующее будет работать нормально:
val formatter: DateTimeFormatter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.getDefault())
val date: DateTime = formatter.parseDateTime("2014-06-20T11:41:08.0+02:00")
Ответ 2 · рейтинг 4 · Basil Bourque
ответ Радыка правильный.
Встроенные форматы ISO 8601
Однако вам вообще не нужно указывать средство форматирования. Класс DateTime содержит встроенный синтаксический анализатор для вашего формата, совместимого с ISO 8601, который автоматически используется конструктор.
DateTime dateTime = new DateTime( "2014-06-20T11:41:08+02:00", timeZone );
Хотя второй аргумент является необязательным, я предлагаю вам назначить DateTimeZone, который будет назначен объекту DateTime, если вы знаете такой часовой пояс. Входная строка имеет смещение от UTC, но часовой пояс - это больше, чем просто смещение. Часовой пояс включает правила для летнего времени и других аномалий. Используйте правильные названия часовых поясов, а не трех- или четырехбуквенные коды, такие как EST или IST.
Другие форматы
Вы можете применить множество других форматов:
Например, если вам нужна только часть даты без времени дня в представлении String, вызовите ISODateTimeFormat.date() для доступа к встроенному средству форматирования.
Пример кода в Joda-Time 2.8.
String output = ISODateTimeFormat.date().print( dateTime ); // Format: yyyy-MM-dd
Найдите в StackOverflow сотни других вопросов и ответов о форматировании значений даты и времени.