ТЛ; Д.Р.
LocalDateTime.parse(
"060420150134" ,
DateTimeFormatter.ofPattern("ddMMuuuuHHmm")
).atOffset(ZoneOffset.UTC)
Использование java.time
Как correct accepted Answer говорит, ваш шаблон форматирования неверен.
Кроме того, вы используете неприятные старые классы времени, которые теперь являются устаревшими, вытесняются классами java.time. См. Ниже информацию о Android.
Коды кода форматирования аналогичны, но не точно идентичны. Поэтому изучите класс doc для DateTimeFormatter
.
String input = "060420150134" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern("ddMMuuuuHHmm");
В вашей строке ввода отсутствует какой-либо индикатор смещения-от-UTC или часового пояса. Поэтому мы анализируем как LocalDateTime
.
LocalDateTime ldt = LocalDateTime.parse(input , f);
Если вы знаете наверняка часовой пояс или смещение, предназначенное для этих данных, применить ZoneId
получить ZonedDateTime
или применить ZoneOffset
получить OffsetDateTime
. По-видимому, в вашем контексте предназначен UTC.
OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC) ;
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & 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
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Вы используете 'ММ' дважды. Второй должен быть «мм», минут, а не месяцев. (Я бы также предположил, что основная часть кода в вопросе не имеет значения, вам просто нужны три строки: создайте SimpleDateFormat, проанализируйте текст, распечатайте результат.) –
Возможный дубликат [синтаксический анализ даты из строки дает исключение в android] (http://stackoverflow.com/questions/29092277/parse-a-date-from-string-gives-exception-in-android) – Signare
@JonSkeet, поэтому MM используется в течение месяца и мм в течение нескольких минут? Я прав? –