目次
Java 日付の妥当性・存在チェック Calendar.setLenient()
Javaで日付の妥当性・存在チェックを行うサンプルプログラムです。
指定した日付文字列(yyyy/MM/dd or yyyy-MM-dd)がカレンダー上に存在するかどうかをチェックします。
java.text.DateFormatクラスのsetLenient()にfalseを指定すると、日付解析を厳密に行うことができます。(※DateFormatクラスは内部的にはjava.util.CalendarクラスのsetLenient()を呼び出しています。)
不正な日付や、存在しない日付でparse()メソッドを呼び出すと、ParseExceptionが発生することを利用したチェック方法となります。
サンプルプログラム
/**
* 日付の妥当性チェックを行います。
* 指定した日付文字列(yyyy/MM/dd or yyyy-MM-dd)が
* カレンダーに存在するかどうかを返します。
* @param strDate チェック対象の文字列
* @return 存在する日付の場合true
*/
public static boolean checkDate(String strDate) {
if (strDate == null || strDate.length() != 10) {
throw new IllegalArgumentException(
"引数の文字列["+ strDate +"]" +
"は不正です。");
}
strDate = strDate.replace('-', '/');
DateFormat format = DateFormat.getDateInstance();
// 日付/時刻解析を厳密に行うかどうかを設定する。
format.setLenient(false);
try {
format.parse(strDate);
return true;
} catch (Exception e) {
return false;
}
}
実行結果
◆実行例
public static void main(String[] args) {
System.out.println(checkDate("2007-01-01"));
System.out.println(checkDate("2007/02/31"));
System.out.println(checkDate("aaaa/02/31"));
}
◆出力結果
true false false
