アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

下記のようなフォーマットで日付型のチェックをしたいと
思っています。最低限(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

ちょっと考えたのは、まず、長さを見て各文字列を
パースして各場所の数値の妥当性をチェックって
言うものです。これでも出来そうな気もしますが、
他にも良いやり方などありましたら、
ご教示宜しくお願い致します。

A 回答 (3件)

区切り文字を、-(ハイフン)または T または :(コロン)として、文字列を抜き出して、それをString配列に格納し、数値かどうかをチェックする。



別の方法として、区切り文字の数に応じて、SimpleDateFormatクラスのインスタンスを生成して、parse()で解析する。
    • good
    • 0
この回答へのお礼

ありがとうございます。

とりあえず、年号部分、月日部分など、ひとつずつチェックしていく方式をとることにしました。
まぁ、手間ですが、きちんとチェックできるようになりました。

お礼日時:2004/03/18 14:41

こんな風にすれば意外とスリムになるんじゃないでしょうか?


ちなみに、このサンプルは動作しません。適当に修正してください。


//全ての入力をいったんロングに変えてしまいます。
//その後、何らかの方法でその文字列を解析します。
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));
//例外がでればそれは、不正な値である。
    • good
    • 0

すみません。

修正です。

//全ての入力をいったんロングに変えてしまいます。
//その後、何らかの方法でその文字列を解析します。
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);
//ここまでで、入力された値を反映したロングフォーマット文字が完成します。
    • good
    • 0
この回答へのお礼

ありがとうございます。

こういうやり方もあるんですね。
参考になりました。

お礼日時:2004/03/18 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!