, , 19 .
( ) toString():
new DateTimeFormatterBuilder()
.appendPattern("yyyyMMdd[ HHmmss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter()
.toString();
:
< > < → (YearOfEra, 4,19, EXCEEDS_PAD) (MonthOfYear, 2) (DayOfMonth, 2) ['' (HourOfDay, 2) (MinuteOfHour, 2) ( SecondOfMinute, 2)] java.time.format.DateTimeFormatterBuilder$DefaultValueParser@32eff876"
, YearOfEra 4 19.
Meno Ole.
, , (, yyyyMMdd[HHmmSS] [...][...]), ( ).
"" , yyyy 4- .
- ( ):
public static DateTimeFormatter createFixed4DigitYearFormatter(String format) {
DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder();
Arrays.stream(format.split("yyyy", -1))
.flatMap(cur -> Stream.of("yyyy", cur)).skip(1)
.filter(str -> !str.isEmpty())
.forEach(pattern -> {
if ("yyyy".equals(pattern)) formatBuilder
.appendValue(ChronoField.YEAR_OF_ERA, 4);
else formatBuilder.appendPattern(pattern);
});
return formatBuilder.parseDefaulting(ChronoField.HOUR_OF_DAY, 0).toFormatter();
}
"yyyy", "yyyy" ( appendPattern(..)), "yyyy" YEAR_OF_ERA 4 ( appendValue(..)).
, :
System.out.println(LocalDateTime.parse("19940513230000",
createFixed4DigitYearFormatter("yyyyMMdd[HHmmss]")));
System.out.println(LocalDateTime.parse("19940513",
createFixed4DigitYearFormatter("yyyyMMdd[HHmmss]")));
System.out.println(LocalDateTime.parse("1994-05-13 23:00:00",
createFixed4DigitYearFormatter("yyyy-MM-dd[ HH:mm:ss]")));
System.out.println(LocalDateTime.parse("1994-05-13",
createFixed4DigitYearFormatter("yyyy-MM-dd[ HH:mm:ss]")));