Как я могу проверить дату (только текущую дату или после) в Java - PullRequest
2 голосов
/ 05 апреля 2019

Мне нужно добавить подтверждение ввода для дат, введенных пользователями.Есть startDate и endDate.StartDate должен быть текущей датой или позже.EndDate должен быть равен OR после startDate.

Используемый формат даты: ГГГГ-ММ-дд

Уже проверяется, что дата является правильной датой

В классе запросов мы в настоящее время используем javax.validationкак это:

@Pattern(regex = CommmonRegexp.DATE, message = "INVALID_FIELD")

Как мне отредактировать это, чтобы соответствовать моим необходимым ограничениям?

Что мне нужно: проверить ввод для обеих дат, убедившись, что startDate принимает только текущую дату или более позднюю, и endDateпринимает только даты позже, чем startDate

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

Вы должны использовать java.time для работы с датами в Java. Ниже приведен рабочий метод для подтверждения даты, как вам требуется. Вы можете изменить формат по своему усмотрению. Есть множество других полезных методов, которые вы можете использовать. вызовите этот метод как validateDates("2019-03-03","2019-04-03")

public static boolean validateDates(String start, String end) {
    try {
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate startDate = LocalDate.parse(start, dateFormat);
        LocalDate endDate = LocalDate.parse(end, dateFormat);
        LocalDate current = LocalDate.now();
        return (startDate.isEqual(current) || startDate.isAfter(current)) && endDate.isAfter(startDate);
    }catch(DateTimeParseException ex) {
        ex.printStackTrace();
    }
    return false;
}

UPDATE

Вы можете использовать предопределенные или пользовательские DateTimeFormatter s в соответствии с вашими потребностями. Вы можете просмотреть этот JavaDoc для подробной информации о DateTimeFormatters и через этот блог для примеров.

Это и это - некоторые полезные сведения о том, как использовать идентификаторы зон с датой и временем.

0 голосов
/ 05 апреля 2019

Вы, вероятно, должны использовать что-то вроде класса LocalDate в Java 8, а не регулярное выражение. Он имеет множество вспомогательных методов, чтобы сделать то, что вы ищете:

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

...