如何检查Java中的时间格式是否正确(带有异常)

时间:2016-12-02 21:20:11

标签: java time time-format

我正致力于将24小时时间戳转换为12小时时间戳的程序。我设法完成转换并循环它,但我需要在输入验证中编码,检查输入是否错误。不正确输入的一个例子是:" 10:83"或" 1):* 2"。有人能告诉我如何使用Exception方法解决这个问题吗?到目前为止,我有这个:

public class conversion {

        public static void timeChange() throws Exception {
            System.out.println("Enter time in 24hr format");
            Scanner sc = new Scanner(System.in);
            String input1 = sc.nextLine();
            DateFormat df = new SimpleDateFormat("HH:mm");
            DateFormat df2 = new SimpleDateFormat ("hh:mm a");
            Date date = null;
            String timeOutput = null;

            date = df.parse(input1);
            timeOutput = df2.format(date);

            System.out.println("in 12 hour format: " + timeOutput);

            decision();
        }

        public static void decision() throws Exception {
            System.out.println("Would you like to enter another time?");

            Scanner sc2 = new Scanner(System.in);
            String userChoice = sc2.nextLine();

            while (userChoice.equalsIgnoreCase("Y")) {
                timeChange();
            }
            System.exit(0);
        }

        public static void main(String[] args) throws Exception {
            timeChange();       
    }
}

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来匹配所需的时间并抛出IllegalArgumentException吗?

if(! input1.matches("(?:[0-1][0-9]|2[0-4]):[0-5]\\d")){
      throw new IllegalArgumentException("The time you entered was not valid");
    }

答案 1 :(得分:0)

使用java.time现代Java日期和时间API。

稍微宽松的验证:

    String inputTimeString = "10:83";
    try {
        LocalTime.parse(inputTimeString);
        System.out.println("Valid time string: " + inputTimeString);
    } catch (DateTimeParseException | NullPointerException e) {
        System.out.println("Invalid time string: " + inputTimeString);
    }

这将接受09:41,09:41:32甚至09:41:32.46293846。但不是10:83,不是24:00(应该是00:00)而不是9:00(需要09:00)。

要进行更严格的验证,请使用具有所需格式的显式格式化程序:

    DateTimeFormatter strictTimeFormatter = DateTimeFormatter.ofPattern("HH:mm")
            .withResolverStyle(ResolverStyle.STRICT);

并将其传递给parse方法:

        LocalTime.parse(inputTimeString, strictTimeFormatter);

现在09:41:32也被拒绝了。

问题:我可以在我的Java版本中使用java.time吗?

如果至少使用Java 6 ,则可以。

要学习使用java.time,请参阅the Oracle tutorial或在网上查找其他资源。

答案 2 :(得分:0)

String inputTimeString = "10:83";
if (!inputTimeString.matches("^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$")){
     System.out.println("Invalid time string: " + inputTimeString);
}