Если вы хотите проанализировать строку даты как объекты "2015-10-01"
и "2015-9-5"
в LocalDateTime
, вы можете создать свой собственный DateTimeFormatter
, используя DateTimeFormatterBuilder
:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy")
.appendLiteral('-')
.appendValue(MONTH_OF_YEAR)
.appendLiteral('-')
.appendValue(DAY_OF_MONTH)
.parseDefaulting(HOUR_OF_DAY, HOUR_OF_DAY.range().getMinimum())
.parseDefaulting(MINUTE_OF_HOUR, MINUTE_OF_HOUR.range().getMinimum())
.parseDefaulting(SECOND_OF_MINUTE, SECOND_OF_MINUTE.range().getMinimum())
.parseDefaulting(NANO_OF_SECOND, NANO_OF_SECOND.range().getMinimum())
.toFormatter();
System.out.println(LocalDateTime.parse("2015-9-5", formatter));
System.out.println(LocalDateTime.parse("2015-10-01", formatter));
Переменная длина каждого поля обрабатывается вызовом appendValue(field)
. Цитирую Javadoc:
Парсер для значения переменной ширины, такого как это, обычно ведет себя жадно, требуя одну цифру, но принимая как можно больше цифр.
Это означает, что он сможет анализировать месяц и дни, отформатированные с 1 или 2 цифрами.
Чтобы построить LocalDateTime
, нам также нужно предоставить LocalTime
этому строителю. Это делается с помощью parseDefaulting(field, value)
для каждого поля LocalTime
. Этот метод принимает поле и значение по умолчанию для этого поля, если оно отсутствует в строке для анализа. Поскольку в нашем случае в String не будет информации о времени, будут выбраны значения по умолчанию, т.е. минимальное значение диапазона допустимых значений для этого поля (получается вызовом getMinimum
в ValueRange
этого поля; возможно, мы могли бы также жестко закодировать здесь 0 ).
В случае, если строка для анализа может содержать информацию о времени, мы можем использовать необязательные разделы DateTimeFormatter
, например:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy")
.appendLiteral('-')
.appendValue(MONTH_OF_YEAR)
.appendLiteral('-')
.appendValue(DAY_OF_MONTH)
.appendPattern("[ HH:mm]") // optional sections are surrounded by []
.parseDefaulting(HOUR_OF_DAY, HOUR_OF_DAY.range().getMinimum())
.parseDefaulting(MINUTE_OF_HOUR, MINUTE_OF_HOUR.range().getMinimum())
.parseDefaulting(SECOND_OF_MINUTE, SECOND_OF_MINUTE.range().getMinimum())
.parseDefaulting(NANO_OF_SECOND, NANO_OF_SECOND.range().getMinimum())
.toFormatter();
System.out.println(LocalDateTime.parse("2015-9-5", formatter));
System.out.println(LocalDateTime.parse("2015-10-01", formatter));
System.out.println(LocalDateTime.parse("2015-1-1 10:10", formatter));
person
Tunaki
schedule
06.10.2015