0

ユーザーが生年月日を yyyy/mm/dd の jTextfield に入力すると、そのように正しく入力し、実際の日付であることを確認したいと思います。これはこれまでの私のコードです:

SimpleDateFormat df = new SimpleDateFormat("yyyy/mm/dd");  
Date testDate = null;

Birth = jTextField3.getText();

try{  
    testDate = df.parse(Birth);
} catch (ParseException e){ }      
if (!df.format(testDate).equals(Birth)){  
    JOptionPane.showMessageDialog(rootPane, "invalid date!!");
}

java.sql.Date私が得ているエラーは、aをaにキャストできないと言われていますjava.util.Date

4

2 に答える 2

6

mm分です。MMは月です:

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");

詳細については、ドキュメントを参照してください。

これを strict (df.setLenient(false)に設定する必要があります。その後、結果を再度フォーマットする必要はありません。解析例外だけで十分です。

個人的には、Java での日付/時刻処理にはJoda Timeを使用しますが、これははるかに優れた API です。

java.util.Datevsについてjava.sql.Dateは、あなたが私たちに与えたコードは完全にjava.util.Date. java.sql.Date保持したいインポートをすでに持っている場合は、次のようにする必要があります。

java.util.Date testDate = ...;

ただし、再フォーマットする必要はないため、変数はまったく必要ない場合もあります。

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
df.setLenient(false);
Date testDate = null;
boolean valid = false;
try {
    df.parse(jTextField3.getText());
    valid = true;
}
catch (ParseException e) { } // valid will still be false
if (!valid) {  
    JOptionPane.showMessageDialog(rootPane, "invalid date!!");
}

(または、catch ブロックでメッセージ ダイアログを表示することもできますがelse、成功した場合の句を簡単に作成することはできません...)

于 2013-08-04T07:26:19.173 に答える