您需要使用DateTimeFormatterBuilder, 指定ISO_DATE格式和默认时间(午夜1):
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_DATE)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter();
Instant instant = Instant.from(formatter.parse("2020-01-12+01:00"));
System.out.println(instant);
1)ChronoField可以是任何时间字段,即HOUR_OF_DAY, CLOCK_HOUR_OF_DAY, MINUTE_OF_DAY, SECOND_OF_DAY, MILLI_OF_DAY, MICRO_OF_DAY, 或NANO_OF_DAY。
输出
2020-01-11T23:00:00Z
如果要保留时区偏移量,则需要使用OffsetDateTime(or ZonedDateTime) 而不是Instant:
OffsetDateTime dateTime = OffsetDateTime.parse("2020-01-12+01:00", formatter);
System.out.println(dateTime);
System.out.println(dateTime.format(DateTimeFormatter.ISO_DATE));
输出(来自 OffsetDateTime 和 ZonedDateTime)
2020-01-12T00:00+01:00
2020-01-12+01:00