Моя программа анализирует входную строку на объект LocalDate
. В большинстве случаев строка выглядит как 30.03.2014
, но иногда она выглядит как 3/30/2014
. В зависимости от этого, мне нужно использовать другой шаблон для вызова DateTimeFormatter.ofPattern(String pattern)
с. В принципе, мне нужно проверить, соответствует ли строка шаблону dd.MM.yyyy
или M/dd/yyyy
перед выполнением разбора.Как проверить, соответствует ли строка даты дате, используя API времени?
Регулярное выражение подход будет что-то вроде:
LocalDate date;
if (dateString.matches("^\\d?\\d/\\d{2}/\\d{4}$")) {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("M/dd/yyyy"));
} else {
date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));
}
Это работает, но было бы неплохо использовать строку даты шаблона при совпадении строки также.
Существуют ли стандартные способы сделать это с помощью нового API Java 8 time, не прибегая к правильному сопоставлению регулярных выражений? Я просмотрел документы для DateTimeFormatter
, но ничего не нашел.
Почему вы не строкой 'replace (" // ",". ")'? –
Я не думаю, что существует конкретный метод проверки того, соответствует ли дата заданному шаблону. Я бы использовал метод SimpleDateFormat.parse и проверял исключение ParseException. Если вы уверены, что дата правильная и она находится в одном из двух шаблонов, вы можете просто проверить, есть ли «.». в строке. – maxvv
@RobertNiestroj Поскольку месяц и день не расположены в одном и том же месте. –