tl; dr
LocalDate.parse(
input ,
DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT )
.withLocale( Locale.sytemDefault() )
)
catch ( DateTimeParseException e ) { … }
Избегайте устаревших классов даты и времени
Во-первых, вы используете ужасные классы, которые были устаревшими несколько лет назад java.time классы, определенные в JSR 310.
Просто проанализируйте его
У меня есть проверка, которая проверяет, правильно ли пользователь ввел правильную дату из ввода, настроенного для его страны.
Вам не нужно знать формат заранее.Если вы хотите увидеть, вводил ли пользователь данные, соответствующие формату, ожидаемому текущим значением по умолчанию Locale
, просто попробуйте выполнить синтаксический анализ.Если синтаксический анализ не выполняется, вы знаете, что ввод был неверным.
Класс DateTimeFormatter
может автоматически определять локализованный формат, соответствующий конкретной локали.
Locale locale = Locale.sytemDefault() ;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( locale ) ;
try
{
LocalDate localDate = LocalDate.parse( input , f ) ;
} catch ( DateTimeParseException e )
{
… handle the situation of faulty input
}
На самом деле, вызов .withLocale
здесь избыточен.Если вы не укажете языковой стандарт, неявно применяется текущее значение по умолчанию для JVM Locale
.Я сделал код явным, как я вам и предлагаю, чтобы сделать наши намерения ясными и очевидными.
Альтернативы
Кто-то прокомментировал:
Итак, вы утверждаете, что в некоторых локалях встроенные форматы неверны?
Вы должны понимать, что локализация - сложная тема.Даже в пределах конкретной культуры могут отличаться мнения относительно того, какие соглашения подходят.
Имейте в виду, что в версии 9 Java, по крайней мере те реализации, использующие OpenJDK, переключали источник деталей локализации,OpenJDK теперь использует Unicode Consortium Common Locale Data Repository (CLDR) .Поэтому некоторые типы поведения и форматы могут отличаться от предыдущих версий.
Помимо всего этого, соглашения со временем меняются и развиваются.
Итог: попробуйте спросить пользователя, какой формат он предпочитает.Предложите список на выбор.Сохраните их желаемый формат в качестве настройки предпочтений.