4


2

有効な時間のみを受け入れる

さて、Javaでは24時間形式の時間をユーザーに尋ねたいと思います。 私は「DateFormat」と「SimpleDateFormat」を利用して、時刻が入力されている形式を伝え、それに応じて解釈し、その形式に従わない場合は例外をスローすることができました。 これは私が持っているものです:

DateFormat fmt = new SimpleDateFormat("HH:mm");
Scanner keyboard = new Scanner(System.in);

try {
    String input = keyboard.nextLine();
    Date theDate = fmt.parse(input);
    System.out.println(theDate.toString());
} catch (ParseException e) {
    System.out.println("Incorrect format!");
    e.printStackTrace();
}

単語を入力すると、実際に例外がスローされます。 しかし、「234234:2342342」のようなものを入力すると、実際に計算が行われ、それらの時間と分が何日であるかがわかり、実際の日付が出力されます。 例えば、与えられた入力:

input: 23423423:232323
output: Fri Jul 29 07:03:00 PDT 4642

これを例外として扱う方法があるかどうか疑問に思っています。 したがって、フォーマッタが指定するもの(H 0-23およびm 0-59)のみを受け入れ、それがこれらの境界内に収まらない場合は、例外をスローするか、何らかの方法で知る必要があります。 私が知りたいのは、私が使用しているフォーマッタクラス内でこれを行う方法があるか、Scannerクラスを使用して行う必要があるか(方法?)、または解析と検証コードを自分で記述する必要があるかどうかです。 私はこれに完全に間違っていますか? 私は現在、可能性を試しているだけなので、より良い方法があれば教えてください。

ありがとうございます。

1 Answer


7


DateFormat`のhttp://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html#setLenient%28boolean%29 [ setLenient`]メソッドを使用して、それを理解しました。

fmt.setLenient(false);

現在、フォーマットに適合しないもの(時間= 0〜23および分= 0〜59)を入力すると、例外がスローされます:)