我正致力于将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();
}
}
答案 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.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);
}