Класс DateTimeFormatterBuilder

Класс DateTimeFormatterBuilder используется для построения кастомных форматтеров даты и времени с помощью паттернов или программируемого API. Он позволяет комбинировать различные элементы формата, устанавливать опции парсинга и создавать сложные форматтеры, которые невозможно создать с помощью простых паттернов.

Импорт

kotlinimport java.time.format.DateTimeFormatterBuilder

Синтаксис

kotlinval builder = DateTimeFormatterBuilder()
kotlinfun appendPattern(pattern: String): DateTimeFormatterBuilder
kotlinfun appendValue(field: TemporalField, width: Int): DateTimeFormatterBuilder
kotlinfun appendLiteral(literal: Char): DateTimeFormatterBuilder
kotlinfun toFormatter(): DateTimeFormatter

Пример

Создадим форматтер для даты в формате день/месяц/год:

kotlinval formatter = DateTimeFormatterBuilder()
  .appendPattern("dd/MM/yyyy")
  .toFormatter()

val dateStr = "31/12/2025"
val date = LocalDate.parse(dateStr, formatter)
println(date)

Результат выполнения кода:

kotlinString "2025-12-31"

Пример

Создадим форматтер с фиксированным литералом:

kotlinval formatter = DateTimeFormatterBuilder()
  .appendValue(ChronoField.DAY_OF_MONTH, 2)
  .appendLiteral('/')
  .appendValue(ChronoField.MONTH_OF_YEAR, 2)
  .appendLiteral('/')
  .appendValue(ChronoField.YEAR, 4)
  .toFormatter()

val dateStr = "31/12/2025"
val date = LocalDate.parse(dateStr, formatter)
println(date)

Результат выполнения кода:

kotlinString "2025-12-31"

Пример

Создадим форматтер с опциональной частью:

kotlinval formatter = DateTimeFormatterBuilder()
  .appendPattern("yyyy-MM-dd")
  .optionalStart()
  .appendLiteral('T')
  .appendPattern("HH:mm:ss")
  .optionalEnd()
  .toFormatter()

val dateTimeStr1 = "2025-12-31T15:30:45"
val dateTimeStr2 = "2025-12-31"

val dateTime1 = LocalDateTime.parse(dateTimeStr1, formatter)
val dateTime2 = LocalDateTime.parse(dateTimeStr2, formatter)

println(dateTime1)
println(dateTime2)

Результат выполнения кода:

kotlinString "2025-12-31T15:30:45"
String "2025-12-31T00:00:00"

Пример

Создадим форматтер с чувствительностью к регистру:

kotlinval formatter = DateTimeFormatterBuilder()
  .parseCaseInsensitive()
  .appendPattern("yyyy-MMM-dd")
  .toFormatter()

val dateStr1 = "2025-Dec-31"
val dateStr2 = "2025-DEC-31"

val date1 = LocalDate.parse(dateStr1, formatter)
val date2 = LocalDate.parse(dateStr2, formatter)

println(date1)
println(date2)

Результат выполнения кода:

kotlinString "2025-12-31"
String "2025-12-31"

Смотрите также

  • класс DateTimeFormatter,
    который предоставляет готовые форматтеры и методы для работы с ними
  • функцию ofPattern класса DateTimeFormatter,
    которая создает форматтер из строки паттерна
  • класс LocalDate,
    который представляет дату без времени
  • класс LocalDateTime,
    который представляет дату и время