DateFomat выдает непарсируемую ошибку даты?

Если у меня есть строковая дата:

2013-11-14T00:00:00.000

Какой формат даты можно использовать для создания даты со смещением?

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
dateFormat.setTimeZone(TimeZone.getDefault());
Date date = dateFormat.parse(myDate);

Вышесказанное дает непарсируемую ошибку даты.

4 ответа

Решение
"yyyy-MM-dd'T'HH:mm:ss.SSS"

использование SSS на миллисекунды и удалить Z поскольку строка даты не имеет часового пояса.

Если вы намереваетесь напечатать / записать дату в другом формате (например, с пользовательским часовым поясом), вам придется использовать другой экземпляр DateFormat:

"yyyy-MM-dd'T'HH:mm:ss.SSS"  // to parse the date string
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" // to format the date object

.000 на конце не обозначение часового пояса; это выглядит как миллисекунды. Попробуйте заменить Z обозначение часового пояса с SSS за миллисекунды.

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");

Ваш поставляется 2013-11-14T00:00:00.000 не указано с указанным выше шаблоном: "yyyy-MM-dd'T'HH:mm:ss.SSS Z" В качестве образца допустимый вход для этого шаблона будет:

2013-11-14T00:00:00.000 -0700

Либо брось Z или передать строку в качестве упомянутого образца.

К вашему сведению, это тот же самый код, использующий Joda-Time 2.3.

Joda-Time использует этот формат ISO 8601 по умолчанию. Нет необходимости в форматере для анализа этой строки. Просто передать строку DateTime конструктор. Конструктор автоматически вызывает встроенный форматер ISO.

String input = "2013-11-14T00:00:00.000";

// Specify a time zone rather than rely on default.
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( input, timeZone );

System.out.println( "dateTime: " + dateTime );

Когда беги…

dateTime: 2013-11-14T00:00:00.000+01:00

Если вам нужен java.util.Date для использования с другими классами, конвертируйте из Joda-Time.

java.util.Date date = dateTime.toDate();
Другие вопросы по тегам