Метод withResolverStyle
Метод withResolverStyle класса DateTimeFormatter устанавливает стиль разрешения, который определяет, как будут обрабатываться противоречивые значения даты и времени при парсинге.
В параметр мы передаем один из трех стилей разрешения: ResolverStyle.STRICT, ResolverStyle.SMART или ResolverStyle.LENIENT.
Импорт
import java.time.format.DateTimeFormatter
import java.time.format.ResolverStyle
Синтаксис
fun withResolverStyle(resolverStyle: ResolverStyle): DateTimeFormatter
Пример
Создадим форматтер со строгим стилем разрешения для проверки корректности даты:
val formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
.withResolverStyle(ResolverStyle.STRICT)
val dateStr = "02-29-2025"
val date = java.time.LocalDate.parse(dateStr, formatter)
println(date)
Результат выполнения кода:
Exception: DateTimeParseException
Пример
Используем лояльный стиль разрешения для обработки несуществующих дат:
val formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy")
.withResolverStyle(ResolverStyle.LENIENT)
val dateStr = "02-29-2025"
val date = java.time.LocalDate.parse(dateStr, formatter)
println(date)
Результат выполнения кода:
String "2025-03-01"
Пример
Сравним разные стили разрешения для одной и той же даты:
val 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")
}
Результат выполнения кода:
String "STRICT: DateTimeParseException"
String "SMART: 2025-04-30"
String "LENIENT: 2025-05-01"
Смотрите также
-
функцию
ofPatternклассаDateTimeFormatter,
которая создает форматтер по шаблону -
функцию
parseклассаDateTimeFormatter,
которая преобразует строку в объект даты-времени -
функцию
withLocaleклассаDateTimeFormatter,
которая устанавливает локаль для форматтера -
класс
LocalDate,
который представляет дату без времени