Это может решить это за вас или, по крайней мере, начать:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("XX")
.toFormatter();
String[] stringsPassed = {
"2018-11-01T16:26:15+0100",
"2018-10-31T08:27:00.0000000Z"
};
for (String sample : stringsPassed) {
OffsetDateTime odt = OffsetDateTime.parse(sample, formatter);
System.out.println(odt);
}
Выход:
2018-11-01T16:26:15+01:00
2018-10-31T08:27Z
Он не анализирует все мыслимые строки ISO 8601, но может анализировать те, которые вы можете получить. Поскольку вы не показали нам только два образца, я не могу знать.
java.time, современный Java-интерфейс даты и времени, вполне соответствует стандарту ISO 8601. Он обрабатывает наличие и отсутствие секунд и доли секунды (до 9 знаков после запятой). Это то, что я использую DateTimeFormatter.ISO_LOCAL_DATE_TIME
в коде. Небольшая проблема заключается в том, что встроенному DateTimeFormatter.ISO_OFFSET_DATE_TIME
, который в противном случае может показаться правильным, требуется двоеточие в смещении UTC, как в +01:00
. Вместо этого я использую шаблон формата XX
. Он принимает смещение без двоеточия, а также принимает Z
, как во втором примере. Если требуется еще больше гибкости, вы можете посмотреть дополнительные части в форматере. Проверьте документацию.
Joda-Time? Не рекомендуется при использовании Java 8. Несколько цитат с домашней страницы Joda-Time:
Joda-Time - это фактическая стандартная библиотека даты и времени для Java
до Java SE 8. Теперь пользователям предлагается перейти на java.time
(JSR-310).
Обратите внимание, что Joda-Time считается в значительной степени "законченным" проектом.
Никаких серьезных улучшений не планируется. Если вы используете Java SE 8, пожалуйста, перенесите
до java.time
(JSR-310).
Даже на Java 6 и 7 я бы порекомендовал бэкпорт java.time вместо Joda-Time.
Ссылки