1

重複の可能性:
Javaで日付をサニティチェックする方法

String を Date に変換したい..受け入れられる String 形式は this のみであるという条件でyyyy/MM/dd-HH:MM:SS

他の形式で提供された日付はエラーになります。

try {
    String str_date = "25/09/2012-13:43:20";
    DateFormat formatter;
    Date date;
    formatter = new SimpleDateFormat("yyyy/MM/dd-hh:mm:ss");
    date = (Date) formatter.parse(str_date);
    System.out.println("Today is " + date);
} catch (ParseException e) {
    System.out.println("Exception :" + e);
}

str_date無効なformat を持っているためdd/MM/yyyy-hh:mm:ss、例外が発生する必要がありますが、期待をスローしていません。

出力はToday is Mon Mar 05 13:43:20 IST 31

4

4 に答える 4

7

使用している解析メソッドの Java doc をざっと見てみると、次のように書かれています。

デフォルトでは、解析は緩やかです。入力がこのオブジェクトの format メソッドで使用される形式ではないが、日付として解析できる場合、解析は成功します。クライアントは、setLenient(false) を呼び出すことにより、形式への厳密な準拠を要求できます。

formatter.setLenient(false);フォーマッタがインスタンス化された後に行を入れてみてください。これにより、フォーマッタは指定した形式のみを使用するようになります。

于 2012-09-26T06:17:19.180 に答える
2
  formatter.setLenient(false);

希望する例外を提供するものとします

Froum javadocs:

デフォルトでは、解析は寛大です。入力がこのオブジェクトのformatメソッドで使用される形式ではないが、日付として解析できる場合、解析は成功します。クライアントは、setLenient(false)を呼び出すことにより、フォーマットの厳密な順守を主張できます。

于 2012-09-26T06:22:13.280 に答える
0

Javadocから:

ParseException - if the *beginning* of the specified string cannot be parsed.

試す

String str_date="25:09/2012-13:43:20";

これにより、ParseException がスローされます。

于 2012-09-26T06:18:00.257 に答える
0

HHではなく、形式を指定する必要がありますhh。それ以外の場合は、13 時が新しい時計を取得する時間です。

于 2012-09-26T06:20:40.640 に答える