Метод parseLenient

Метод parseLenient класса DateTimeFormatterBuilder переключает парсер в лояльный режим, который позволяет обрабатывать даты с некорректными значениями (например, 31 апреля или 30 февраля). В этом режиме значения автоматически нормализуются (например, 31 апреля становится 1 мая).

Импорт

kotlinimport java.time.format.DateTimeFormatterBuilder

Синтаксис

kotlinfun parseLenient(): DateTimeFormatterBuilder

Пример

Создадим форматтер с лояльным парсингом для обработки некорректной даты "2025-04-31":

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

val dateStr = "2025-04-31"
val date = java.time.LocalDate.parse(dateStr, formatter)
println(date)

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

kotlinString "2025-05-01"

Пример

Сравним строгий и лояльный парсинг для некорректной даты:

kotlin// Строгий парсинг (по умолчанию)
val strictFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")

// Лояльный парсинг
val lenientFormatter = DateTimeFormatterBuilder()
  .appendPattern("yyyy-MM-dd")
  .parseLenient()
  .toFormatter()

val invalidDateStr = "2025-02-30"

try {
  val strictDate = java.time.LocalDate.parse(invalidDateStr, strictFormatter)
  println("Strict: $strictDate")
} catch (e: Exception) {
  println("Strict parsing failed: ${e.message}")
}

try {
  val lenientDate = java.time.LocalDate.parse(invalidDateStr, lenientFormatter)
  println("Lenient: $lenientDate")
} catch (e: Exception) {
  println("Lenient parsing failed: ${e.message}")
}

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

kotlinString "Strict parsing failed: Text '2025-02-30' could not be parsed: Invalid date 'FEBRUARY 30'"
String "Lenient: 2025-03-02"

Пример

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

kotlinval timeFormatter = DateTimeFormatterBuilder()
  .appendPattern("HH:mm:ss")
  .parseLenient()
  .toFormatter()

val timeStr = "25:70:80"
val time = java.time.LocalTime.parse(timeStr, timeFormatter)
println(time)

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

kotlinString "02:11:20"

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

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