0

を使用して日付を検証するメソッドを作成したいと考えていますSimpleDateFormat

日付が有効な場合 (02/09/2012または2/09/2012または など02/9/2012)、このメソッドはtrueを返す必要があります。

ただし、日付の形式が間違っている場合 (例: 02/09/201X)、または論理的に間違っている場合 (例: 32/09/2012)、このメソッドはfalseを返す必要があります。

このメソッドを次のように記述しようとします。

private boolean isValidDate(String date) {
        DateFormat df1 = new SimpleDateFormat("dd-MM-yyyy");
        DateFormat df2 = new SimpleDateFormat("d-MM-yyyy");
        DateFormat df3 = new SimpleDateFormat("dd-M-yyyy");
        Date d = null;
        String s = null;

        try {
            d = df1.parse(date);
        }catch (Exception e1) {
            try{
                d = df2.parse(date);
            }catch (Exception e2) {
                try {
                    d= df3.parse(date);
                }catch (Exception e3) {
                    return false;
                }
                s = df3.format(d);
                return date.equals(s);
            }
            s = df2.format(d);
            return date.equals(s);
        }
        s = df1.format(d);
        return date.equals(s);
    }

しかし、たとえば、日付を検証すると、false2/09/2012が返されます(実際にはtrueが返されるはずです)。理由がわかりません...誰かが私のコードの問題を見つけることができますか、それともこのロジックは完全に間違っていますか? この検証を行うためのより良い方法はありますか?

4

4 に答える 4

2

入力は 2-09-2012 ではなく 2/09/2012 の形式であるため、日付形式は次のようになります。

    DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
    DateFormat df2 = new SimpleDateFormat("d/MM/yyyy");
    DateFormat df3 = new SimpleDateFormat("dd/M/yyyy");
于 2012-10-11T14:44:54.330 に答える
1

あなたのコードは問題ないと思います(ただし、あまりスケーラブルではありません-後でフォーマットを追加する場合に備えて、forループで実行してみてください)。

問題は、フォーマット文字列が間違っていることです。あなたの代わりにdd-MM-yyyy持っている必要がありますdd/MM/yyyy。残りの形式についても同様です。

DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
DateFormat df2 = new SimpleDateFormat("d/MM/yyyy");
DateFormat df3 = new SimpleDateFormat("dd/M/yyyy");
于 2012-10-11T14:46:15.693 に答える
1

/ではないため、検証は失敗します-

于 2012-10-11T14:46:20.203 に答える
0

各文字列を解析した後に、次のチェックを追加します。

  1. 日付文字列の値をトークン化する
  2. 次に、抽出された日、月、年の値を使用して、GregorianCalendar を使用して新しい Date オブジェクトを作成します。
  3. これを、日付文字列の解析から作成した日付オブジェクトと比較します
  4. それらが一致する場合、入力文字列に有効な日付形式が含まれていることがわかります
于 2012-10-11T14:47:47.987 に答える