画面から入力された値が日付として妥当かどうかをチェックする方法。
ここで言ってる「妥当かどうか」と言うのは、
① そもそもそんな日付が存在するのか
(2014年10月40日とか、うるう年とか・・・)
② 想定している書式で日付が入力されているか
(“2014/01/23”の書式を期待していたのに“20140123”と入力されたとか・・・)
この2つ。入力された値がこの2つを満たしているかどうかをチェックする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 妥当性OKな日付 String date1 = "2014/01/09"; // 妥当性NGな日付 String date2 = "2014/01/32"; // 日付の書式を指定する DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); // 日付解析を厳密に行う設定にする df.setLenient(false); try { // 日付妥当性OK df.parse(date1); // 日付妥当性NG(例外発生) df.parse(date2); } catch (ParseException e) { // 日付妥当性NG時の処理を記述 } |
やっていることは、チェック対象文字列のDate型への変換。
変換できれば妥当性OK、変換できなければ妥当性NG。
んで、変換する際の「日付文字列はこの書式で受け取りますよ~」というものを、SimpleDateFormatオブジェクト作成時のパラメータに指定している感じ。
んで、ポイントとしてはSimpleDateFormatオブジェクトのsetLenient(false)。この設定をすることで、日付の厳密な解析を行ってくれるようになるんで、この設定が漏れると日付の値のチェックをしてくれない。(上の①のチェックをしてくれない)
ちなみに、SimpleDateFormatオブジェクトに“yyyy/MM/dd”という書式を指定した場合、“2014/01/09”も“2014/1/9”も妥当性OK。でも、“yyyyMMdd”という書式を指定した場合は、“20140109”はOKで“201419”はNG。