您需要使用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