15 янв. 2016 г., 12:43 от StasKolodyuk

Анализ даты смещения Java 8

Мне нужно проанализировать строку в следующем формате2015-01-15-05:00 в LocalDate (или что-то еще) в UTC. Проблема в том, что следующий код:

System.out.println(LocalDate.parse("2015-01-15-05:00", DateTimeFormatter.ISO_OFFSET_DATE));

выходы2015-01-15 игнорируя смещение. Желаемый результат2015-01-16

Заранее спасибо!

Ответы на вопрос (0)

15 янв. 2016 г., 12:12 от 1,601

TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_OFFSET_DATE.parse("2015-01-15-05:00");
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDate.from(temporalAccessor), LocalTime.MAX, ZoneId.from(temporalAccessor));
System.out.println(zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).toLocalDate());
15 янв. 2016 г., 12:35 от JodaStephen

Самый простой ответ - использоватьOffsetDateTime для представления данных, но вам нужно установить время по умолчанию:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_OFFSET_DATE)
    .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
    .toFormatter();
OffsetDateTime dt = OffsetDateTime.parse("2015-01-15-05:00", fmt);
LocalDate date = dt.withOffsetSameInstant(ZoneOffset.UTC).toLocalDate();

ZonedDateTime полезно, если вы имеете дело с часовыми поясами, но когда вы имеете дело только со смещениями,OffsetDateTime проще

В общем случае код приложения не должен содержать переменные типаTemporalAccessor, Если вы видите это, как правило, есть лучший способ.

ВАШ ОТВЕТ НА ВОПРОС