Метод optionalStart

Метод optionalStart класса DateTimeFormatterBuilder начинает необязательную секцию при построении форматтера. Все элементы, добавленные после вызова этого метода, будут считаться необязательными до вызова optionalEnd. Это позволяет парсить строки, которые могут содержать дополнительные необязательные компоненты.

Импорт

kotlinimport java.time.format.DateTimeFormatterBuilder

Синтаксис

kotlinfun optionalStart(): DateTimeFormatterBuilder

Пример

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

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

val dateTimeStr1 = "2025-12-31 14:30:00"
val dateTime1 = java.time.LocalDateTime.parse(dateTimeStr1, formatter)
println(dateTime1)

val dateTimeStr2 = "2025-12-31"
val dateTime2 = java.time.LocalDateTime.parse(dateTimeStr2, formatter)
println(dateTime2)

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

kotlinString "2025-12-31T14:30:00"
String "2025-12-31T00:00:00"

Пример

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

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

val dateTimeStr1 = "2025-07-15T14:30:45"
val dateTime1 = java.time.LocalDateTime.parse(dateTimeStr1, formatter)
println(dateTime1)

val dateTimeStr2 = "2025-07-15T14:30"
val dateTime2 = java.time.LocalDateTime.parse(dateTimeStr2, formatter)
println(dateTime2)

val dateTimeStr3 = "2025-07-15"
val dateTime3 = java.time.LocalDateTime.parse(dateTimeStr3, formatter)
println(dateTime3)

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

kotlinString "2025-07-15T14:30:45"
String "2025-07-15T14:30:00"
String "2025-07-15T00:00:00"

Пример

Используем необязательную секцию для парсинга временной зоны:

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

val dateTimeStr1 = "2025-03-20 10:15:30 +03:00"
val dateTime1 = java.time.ZonedDateTime.parse(dateTimeStr1, formatter)
println(dateTime1)

val dateTimeStr2 = "2025-03-20 10:15:30"
val dateTime2 = java.time.LocalDateTime.parse(dateTimeStr2, formatter)
println(dateTime2)

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

kotlinString "2025-03-20T10:15:30+03:00"
String "2025-03-20T10:15:30"

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

  • метод optionalEnd класса DateTimeFormatterBuilder,
    который завершает необязательную секцию
  • метод appendPattern класса DateTimeFormatterBuilder,
    который добавляет шаблон к форматтеру
  • метод toFormatter класса DateTimeFormatterBuilder,
    который создает готовый форматтер
  • класс DateTimeFormatter,
    который представляет форматтер даты-времени