Если вы хотите разобрать строку даты в "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. Поскольку в нашем случае информация о времени не будет присутствовать в 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));
Я извините, но, пожалуйста, внимательно прочитайте вопрос. Я не спрашиваю об использовании. –