2013-05-10 4 views
-1

У меня есть строка 20130510T202132Z, которую я хочу преобразовать в объект DateTime.Преобразование строки ISO8601 в формат DateTime?

Я пытался использовать Joda, чтобы заставить это работать, но я не могу заставить его работать. Я ударил каждую ссылку, которую я могу найти по этому вопросу, - и использовал форматирование, но это просто не работает.

Каков наилучший способ для этого?

+6

В будущем, если вы пробовали вещи, вам стоит показать, что вы пробовали, и объяснить, как это не сработало для вас. –

+0

FYI, этот формат с минимальным использованием разделителей известен как [«базовая» версия стандартных форматов ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601#General_principles). В расширенном формате используются разделители, такие как '2013-05-10T20: 21: 32Z'. –

ответ

9

Joda Время делает это очень легко, так как она имеет встроенную поддержку формат ISO:

DateTimeFormatter iso = ISODateTimeFormat.basicDateTimeNoMillis(); 
DateTime dateTime = iso.parseDateTime(text); 
+0

Большое спасибо, что сработало! – envinyater

0

Проект Joda время находится в режиме технического обслуживания, с командой советуя миграции на Java. временные классы.

DateTimeFormatter

К сожалению, это «основной» (минимальные сепараторы) версия стандартного формата ISO 8601 не предопределены в java.time от Java 8. Использование DateTimeFormatter класса, чтобы указать шаблон соответствия.

String input = "20130510T202132Z"; 
DateTimeFormatter f = DateTimeFormatter.ofPattern ("uuuuMMdd'T'HHmmssX"); 

Кстати, вариант с разделителями, например, как 2013-05-10T20:21:32Z известно как extended version of ISO 8601.

OffsetDateTime

Анализировать как OffsetDateTime объекта. Этот класс представляет момент на шкале времени, скорректированной до определенного offset-from-UTC, и разрешающей наносекунды. В этом случае смещение составляет UTC.

OffsetDateTime odt = OffsetDateTime.parse (input , f); 

odt.toString(): 2013-05-10T20:21:32Z


О java.time

java.time каркас встроен в Java 8 и более поздних. Эти классы вытесняют неприятные старые классы legacy, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8 и SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ​​ThreeTen-Backport.
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (как упоминалось выше) для Android специально.
    • См. How to use….

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.