- ベストアンサー
日付型の入力値チェック
こんにちは。 下記のようなフォーマットで日付型のチェックをしたいと 思っています。最低限(1)YYYYが入力されていればOKで、 最高だと(8)YYYY-MM-DDThh:mm:ss.sTZDまで入力可能です。 この日付が妥当であれるかどうかの判定はどのように するのが良いでしょうか? YYYY[-MM[-DD[Thh[:mm[:ss[.s[TZD]]]]]]] (1)YYYY (2)YYYY-MM (3)YYYY-MM-DD (4)YYYY-MM-DDThh (5)YYYY-MM-DDThh:mm (6)YYYY-MM-DDThh:mm:ss (7)YYYY-MM-DDThh:mm:ss.s (8)YYYY-MM-DDThh:mm:ss.sTZD ちょっと考えたのは、まず、長さを見て各文字列を パースして各場所の数値の妥当性をチェックって 言うものです。これでも出来そうな気もしますが、 他にも良いやり方などありましたら、 ご教示宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
区切り文字を、-(ハイフン)または T または :(コロン)として、文字列を抜き出して、それをString配列に格納し、数値かどうかをチェックする。 別の方法として、区切り文字の数に応じて、SimpleDateFormatクラスのインスタンスを生成して、parse()で解析する。
その他の回答 (2)
- covachan
- ベストアンサー率38% (46/120)
すみません。修正です。 //全ての入力をいったんロングに変えてしまいます。 //その後、何らかの方法でその文字列を解析します。 StringBuffer sb = new StringBuffer("2004-08-16"); String data = "2000-01-01 00:00:00.0 TZD"; char[] data_char = data.toCharArray(); sb.getChars(0,sb.length(),data_char,0); //ここまでで、入力された値を反映したロングフォーマット文字が完成します。
お礼
ありがとうございます。 こういうやり方もあるんですね。 参考になりました。
- covachan
- ベストアンサー率38% (46/120)
こんな風にすれば意外とスリムになるんじゃないでしょうか? ちなみに、このサンプルは動作しません。適当に修正してください。 //全ての入力をいったんロングに変えてしまいます。 //その後、何らかの方法でその文字列を解析します。 String data = "2000-01-01 00:00:00.0 TZD"; char[] data_char = data.toCharArray(); sb.getChars(0,sb.length(),data_char,0); //ここまでで、入力された値を反映したロングフォーマット文字が完成します。 //以降解析処理。ここの解析処理はご自分で・・・ DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.JAPAN); Date myDate = df.parse(new String(data_char)); //例外がでればそれは、不正な値である。
お礼
ありがとうございます。 とりあえず、年号部分、月日部分など、ひとつずつチェックしていく方式をとることにしました。 まぁ、手間ですが、きちんとチェックできるようになりました。