2017-02-06 18 views
0

ЯНевозможно разобрать дату с информацией о зоне с помощью SimpleDateFormat

Формат: dd-MM-yyyy'T'HH:mm:sszzz

локали: en_US

Дата: 01-02-2016T10:00:00+01:00

ZoneId: Europe/Warsaw

и я называю :

new SimpleDateFormat(format, locale).parse(date).toInstant().atZone(zoneId)

и я получаю Unparseable date: "01-02-2016T10:00:00+01:00"

Есть ли возможность использовать SimpleDateFormat или мне нужно, чтобы изменить его на что-то другое?

ответ

1

Для соответствия "01-02-2016T10:00:00+01:00" ваша строка формата должна быть "dd-MM-yyyy'T'HH:mm:ssXXX". У вас есть zzz, где у вас должно быть XXX. См. javadoc.

Кроме того, это довольно странный формат для использования. Обычно, когда вы видите разделитель T между датой и временем, он указывает формат ISO8601 (или формат на основе ISO8601, такой как RFC3339). Однако в этом формате дата указана в порядке «год-месяц-день». У вас есть день-месяц-год. Это противоречие наверняка вызовет путаницу в какой-то момент. Я настоятельно рекомендую изменить источник этих данных, чтобы либо использовать правильный порядок, либо заменить поле T пробелом, а также разместить пространство до смещения tz.

Другими словами, ваши данные должны выглядеть следующим образом:

"01-02-2016 10:00:00 +01:00" // Human-readable, but locale-specfic 

или

"2016-02-01T10:00:00+01:00" // ISO8601/RFC3339 compliant 

НЕ

"01-02-2016T10:00:00+01:00" // Nonsense