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();