Метод parseLenient
Метод parseLenient
класса DateTimeFormatterBuilder
переключает парсер в лояльный режим,
который позволяет обрабатывать даты с некорректными значениями (например, 31 апреля или 30 февраля).
В этом режиме значения автоматически нормализуются (например, 31 апреля становится 1 мая).
Импорт
import java.time.format.DateTimeFormatterBuilder
Синтаксис
fun parseLenient(): DateTimeFormatterBuilder
Пример
Создадим форматтер с лояльным парсингом для обработки некорректной даты "2025-04-31"
:
val formatter = DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd")
.parseLenient()
.toFormatter()
val dateStr = "2025-04-31"
val date = java.time.LocalDate.parse(dateStr, formatter)
println(date)
Результат выполнения кода:
String "2025-05-01"
Пример
Сравним строгий и лояльный парсинг для некорректной даты:
// Строгий парсинг (по умолчанию)
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}")
}
Результат выполнения кода:
String "Strict parsing failed: Text '2025-02-30' could not be parsed: Invalid date 'FEBRUARY 30'"
String "Lenient: 2025-03-02"
Пример
Используем лояльный парсинг для времени с некорректными значениями:
val timeFormatter = DateTimeFormatterBuilder()
.appendPattern("HH:mm:ss")
.parseLenient()
.toFormatter()
val timeStr = "25:70:80"
val time = java.time.LocalTime.parse(timeStr, timeFormatter)
println(time)
Результат выполнения кода:
String "02:11:20"
Смотрите также
-
функцию
ofPattern
классаDateTimeFormatter
,
которая создает форматтер для парсинга дат -
функцию
parse
классаLocalDate
,
которая преобразует строку в дату -
метод
parseStrict
классаDateTimeFormatterBuilder
,
который включает строгий режим парсинга -
класс
DateTimeFormatterBuilder
,
который предоставляет методы для построения форматтеров