Javaで日付を表す文字列がカレンダーに即しているか判定する

見出しの通りの機能を持つクラスです。必要に応じてYMDのパターンと正規表現を追加していけばいい感じに使えると思います。isOnCalendarメソッドを呼び出せば判定できます。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Optional;

public class DateValidator {

	private DateValidator() {
		throw new IllegalStateException("Cannot instantiate " + DateValidator.class.getName());
	}

	public static boolean isOnCalendar(String date) {
		if (date == null) {
			return false;
		}

		Optional<RegexYmdPatternPair> ryppCorrespondingToDate = Arrays.stream(RegexYmdPatternPair.values())
				.filter(p -> date.matches(p.regex)).findFirst();

		if (ryppCorrespondingToDate.isEmpty()) {
			return false;
		}

		try {
			createStrictSimpleDateFormat(ryppCorrespondingToDate.get().ymdPattern).parse(date);
		} catch (ParseException e) {
			return false;
		}

		return true;
	}

	private static SimpleDateFormat createStrictSimpleDateFormat(String ymdPattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(ymdPattern);
		sdf.setLenient(false);
		return sdf;
	}

	private enum RegexYmdPatternPair {

		WITHOUT_SEPARATOR("^[0-9]{8}$", "yyyyMMdd"),
		SEPARATED_BY_HYPHEN("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "yyyy-MM-dd"),
		SEPARATED_BY_SLASH("^[0-9]{4}/[0-9]{2}/[0-9]{2}$", "yyyy/MM/dd");

		private final String regex;
		private final String ymdPattern;

		private RegexYmdPatternPair(String regex, String ymdPattern) {
			this.regex = regex;
			this.ymdPattern = ymdPattern;
		}

	}

}