Метод withResolverStyle

Метод withResolverStyle класса DateTimeFormatter устанавливает стиль разрешения, который определяет, как будут обрабатываться противоречивые значения даты и времени при парсинге. В параметр мы передаем один из трех стилей разрешения: ResolverStyle.STRICT, ResolverStyle.SMART или ResolverStyle.LENIENT.

Импорт

kotlinimport java.time.format.DateTimeFormatter
import java.time.format.ResolverStyle

Синтаксис

kotlinfun withResolverStyle(resolverStyle: ResolverStyle): DateTimeFormatter

Пример

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

kotlinval formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
  .withResolverStyle(ResolverStyle.STRICT)

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

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

kotlinException: DateTimeParseException

Пример

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

kotlinval formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
  .withResolverStyle(ResolverStyle.LENIENT)

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

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

kotlinString "2025-03-01"

Пример

Сравним разные стили разрешения для одной и той же даты:

kotlinval strictFormatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
  .withResolverStyle(ResolverStyle.STRICT)

val smartFormatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
  .withResolverStyle(ResolverStyle.SMART)

val lenientFormatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
  .withResolverStyle(ResolverStyle.LENIENT)

val dateStr = "04-31-2025"

try {
  val strictDate = java.time.LocalDate.parse(dateStr, strictFormatter)
  println("STRICT: $strictDate")
} catch (e: Exception) {
  println("STRICT: DateTimeParseException")
}

try {
  val smartDate = java.time.LocalDate.parse(dateStr, smartFormatter)
  println("SMART: $smartDate")
} catch (e: Exception) {
  println("SMART: DateTimeParseException")
}

try {
  val lenientDate = java.time.LocalDate.parse(dateStr, lenientFormatter)
  println("LENIENT: $lenientDate")
} catch (e: Exception) {
  println("LENIENT: DateTimeParseException")
}

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

kotlinString "STRICT: DateTimeParseException"
String "SMART: 2025-04-30"
String "LENIENT: 2025-05-01"

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

  • функцию ofPattern класса DateTimeFormatter,
    которая создает форматтер по шаблону
  • функцию parse класса DateTimeFormatter,
    которая преобразует строку в объект даты-времени
  • функцию withLocale класса DateTimeFormatter,
    которая устанавливает локаль для форматтера
  • класс LocalDate,
    который представляет дату без времени