Достаточно легко, когда знаешь как. Нам нужен встроенный форматер. Сложность в том, что нет типа для разбора строки, нет OffsetDate
. Я представляю два варианта решения этой проблемы.
String s = "2020-01-12+01:00";
TemporalAccessor parsed = DateTimeFormatter.ISO_OFFSET_DATE.parse(s);
LocalDate date = LocalDate.from(parsed);
ZoneOffset offset = ZoneOffset.from(parsed);
Instant result = date.atStartOfDay(offset).toInstant();
System.out.println(result);
Вывод этого фрагмента:
2020-01-11T23: 00: 00Z
Нам редко нужно напрямую использовать интерфейс TemporalAccessor
, и он считается низкоуровневым. Это также не единственный способ go здесь. Другим хорошим вариантом является определение времени суток по умолчанию, чтобы мы могли выполнить синтаксический анализ непосредственно в Instant
:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_OFFSET_DATE)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter();
Instant result = formatter.parse(s, Instant::from);
Результат такой же, как и раньше.