Получение ParseException со строкой, содержащей дату в формате ISO 8601, с использованием Java 1.6

Продолжайте получать ParseException, когда я пытаюсь разобрать строку в формате ISO 8601 в тип даты Java.

String myDateString = "2014-07-04T22:59:36Z";  
TimeZone timeZone = TimeZone.getTimeZone("UTC");
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US);
dateFormat.setTimeZone(timeZone);
Date formattedDate = dateFormat.parse(myDateString);

Продолжает возвращать ParseException:

Unparseable date: "2014-07-04T22:59:36Z"

Что я, возможно, делаю неправильно?


person Andre Perez    schedule 28.08.2014    source источник
comment
Вы должны использовать X (без кавычек), а не 'Z'. И вам нужно :ss секунд -- "yyyy-MM-dd'T'HH:mm:ssX".   -  person Hot Licks    schedule 28.08.2014
comment


Ответы (2)


Вам не хватает секунд в формате даты:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
person Justin    schedule 28.08.2014

tl;dr

Для Java 6 и 7 добавьте в свой проект библиотеку ThreeTen-Backport. Для Java 8 и более поздних версий java.time является встроенным.

Instant.parse( "2014-07-04T22:59:36Z" )

Java.время

Современный способ заключается в использовании классов java.time, которые заменяют проблемные старые устаревшие классы даты и времени, такие как SimpleDateFormat, Date и Calendar.

Хотя он встроен в Java 8 и более поздние версии, доступен обратный порт для Java 6 и Java 7. (Смотри ниже)

Instant

Класс Instant представляет момент на временная шкала в UTC с разрешением наносекунды (до девяти (9) цифр десятичной дроби).

Классы java.time по умолчанию используют форматы ISO 8601. Поэтому не нужно указывать шаблон форматирования. Класс Instant может напрямую анализировать вашу входную строку.

Instant instant = Instant.parse( "2014-07-04T22:59:36Z" );

Чтобы сгенерировать строку в стандартном формате ISO 8601, просто вызовите toString.

String output = instant.toString();

2014-07-04T22:59:36Z


О java.time

Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.

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

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

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

person Basil Bourque    schedule 29.03.2017