代码之家  ›  专栏  ›  技术社区  ›  Jorge Israel Peña

只接受有效时间

  •  4
  • Jorge Israel Peña  · 技术社区  · 16 年前

    好的,在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
    

    我想知道是否有办法把这当作一个例外。所以我只想接受格式化程序指定的内容(h0-23和m0-59),如果它不在这些边界内,抛出一个异常或者有某种方法知道。我想知道的是,在我正在使用的格式化程序类中是否有这样做的方法,或者是否应该使用Scanner类(如何?),或者是否必须自己编写解析和验证代码。我完全错了吗?我目前正在尝试的可能性,所以如果有更好的方法,请让我知道。

    1 回复  |  直到 16 年前
        1
  •  7
  •   Jorge Israel Peña    16 年前

    我想出来了,用 DateFormat setLenient

    fmt.setLenient(false);
    

    现在输入任何不符合格式的内容(小时=0到23分钟=0到59分钟),就会抛出一个异常:)