< prev index next >
src/java.base/share/classes/java/time/format/DateTimeFormatter.java
Print this page
@@ -921,10 +921,11 @@
* The format consists of:
* <ul>
* <li>The {@link #ISO_LOCAL_DATE_TIME}
* <li>The {@link ZoneOffset#getId() offset ID}. If the offset has seconds then
* they will be handled even though this is not part of the ISO-8601 standard.
+ * The offset parsing is lenient, which allows the minutes and seconds to be optional.
* Parsing is case insensitive.
* </ul>
* <p>
* The returned formatter has a chronology of ISO set to ensure dates in
* other calendar systems are correctly converted.
@@ -933,11 +934,13 @@
public static final DateTimeFormatter ISO_OFFSET_DATE_TIME;
static {
ISO_OFFSET_DATE_TIME = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append(ISO_LOCAL_DATE_TIME)
+ .parseLenient()
.appendOffsetId()
+ .parseStrict()
.toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
//-----------------------------------------------------------------------
/**
@@ -1158,10 +1161,11 @@
* <li>Two digits for the {@link ChronoField#DAY_OF_MONTH day-of-month}.
* This is pre-padded by zero to ensure two digits.
* <li>If the offset is not available to format or parse then the format is complete.
* <li>The {@link ZoneOffset#getId() offset ID} without colons. If the offset has
* seconds then they will be handled even though this is not part of the ISO-8601 standard.
+ * The offset parsing is lenient, which allows the minutes and seconds to be optional.
* Parsing is case insensitive.
* </ul>
* <p>
* As this formatter has an optional element, it may be necessary to parse using
* {@link DateTimeFormatter#parseBest}.
@@ -1176,11 +1180,13 @@
.parseCaseInsensitive()
.appendValue(YEAR, 4)
.appendValue(MONTH_OF_YEAR, 2)
.appendValue(DAY_OF_MONTH, 2)
.optionalStart()
+ .parseLenient()
.appendOffset("+HHMMss", "Z")
+ .parseStrict()
.toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
//-----------------------------------------------------------------------
/**
< prev index next >