当用户在 Java8 中输入错误的日期格式时如何给出错误消息
How to give Error message when user input wrong format of date in Java8
如果用户使用错误的格式输入,我想给出错误消息。正确的格式是 "yyyy-MM-dd HH:mm:ss"。我怎样才能把它作为条件?
例如
如果 (yyyy < 0 )
{ sout("please input correct year")}
这是我用来询问用户并对其进行格式化的代码
Scanner keyboard = new Scanner(System.in);
String hour = "00:00:00";
System.out.println("Please enter Date : ");
String time = keyboard.next()+" "+ hour;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(time, formatter);
您可以使用正则表达式比较:
while input doesn't match the regex pattern
print "Please enter date in the correct format: yyyy-MM-dd HH:mm:ss"
continue with the rest of the code
RegEx 模式可以是:
\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d(?:.\d+)?Z?
您可以使用 this 站点来创建和测试 RegEx 模式
如果用户应该只输入一个日期(例如 2019-03-31
),那么您的程序没有理由也应该关注一天中的时间。此外,您的格式是 ISO 8601,LocalDate
和 java.time 的另一个 类 解析(并打印)的格式是默认格式。所以你不需要一个明确的格式化程序。
我知道你想要一个范围检查,这当然是可取的。此外,如果用户输入完全不同的格式,解析将抛出一个 DateTimeParseException
,您应该捕捉并采取相应的行动。例如:
LocalDate minAcceptedDate = LocalDate.of(0, Month.JANUARY, 1);
LocalDate maxAcceptedDate = LocalDate.of(4000, Month.DECEMBER, 31);
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter Date : ");
while (true) {
String time = keyboard.next();
try {
LocalDate dateTime = LocalDate.parse(time);
if (dateTime.isBefore(minAcceptedDate) || dateTime.isAfter(maxAcceptedDate)) {
System.out.println("Please enter a date in the range " + minAcceptedDate + " through " + maxAcceptedDate);
} else { // OK
break;
}
} catch (DateTimeParseException dtpe) {
System.out.println("Please enter a date in format yyyy-mm-dd");
}
}
示例会话:
Please enter Date :
Yesterday
Please enter a date in format yyyy-mm-dd
-001-12-30
Please enter a date in format yyyy-mm-dd
5000-12-12
Please enter a date in the range 0000-01-01 through 4000-12-31
2016-09-22
如果用户使用错误的格式输入,我想给出错误消息。正确的格式是 "yyyy-MM-dd HH:mm:ss"。我怎样才能把它作为条件?
例如 如果 (yyyy < 0 ) { sout("please input correct year")}
这是我用来询问用户并对其进行格式化的代码
Scanner keyboard = new Scanner(System.in);
String hour = "00:00:00";
System.out.println("Please enter Date : ");
String time = keyboard.next()+" "+ hour;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(time, formatter);
您可以使用正则表达式比较:
while input doesn't match the regex pattern
print "Please enter date in the correct format: yyyy-MM-dd HH:mm:ss"
continue with the rest of the code
RegEx 模式可以是:
\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d(?:.\d+)?Z?
您可以使用 this 站点来创建和测试 RegEx 模式
如果用户应该只输入一个日期(例如 2019-03-31
),那么您的程序没有理由也应该关注一天中的时间。此外,您的格式是 ISO 8601,LocalDate
和 java.time 的另一个 类 解析(并打印)的格式是默认格式。所以你不需要一个明确的格式化程序。
我知道你想要一个范围检查,这当然是可取的。此外,如果用户输入完全不同的格式,解析将抛出一个 DateTimeParseException
,您应该捕捉并采取相应的行动。例如:
LocalDate minAcceptedDate = LocalDate.of(0, Month.JANUARY, 1);
LocalDate maxAcceptedDate = LocalDate.of(4000, Month.DECEMBER, 31);
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter Date : ");
while (true) {
String time = keyboard.next();
try {
LocalDate dateTime = LocalDate.parse(time);
if (dateTime.isBefore(minAcceptedDate) || dateTime.isAfter(maxAcceptedDate)) {
System.out.println("Please enter a date in the range " + minAcceptedDate + " through " + maxAcceptedDate);
} else { // OK
break;
}
} catch (DateTimeParseException dtpe) {
System.out.println("Please enter a date in format yyyy-mm-dd");
}
}
示例会话:
Please enter Date :
Yesterday
Please enter a date in format yyyy-mm-dd
-001-12-30
Please enter a date in format yyyy-mm-dd
5000-12-12
Please enter a date in the range 0000-01-01 through 4000-12-31
2016-09-22