如何在java中检查用户输入是纯文本还是日期
我有下面的java代码,如果用户输入指定格式的日期,例如2011-11-11,它可以工作,但是当用户输入纯文本时,程序崩溃,例如“hello”、“yes”。代码将用户输入日期与当前日期进行比较,并执行操作。如何检查以确保用户输入日期而不是纯文本,然后程序才能继续。代码如下:如何在java中检查用户输入是纯文本还是日期,java,datetime,Java,Datetime,我有下面的java代码,如果用户输入指定格式的日期,例如2011-11-11,它可以工作,但是当用户输入纯文本时,程序崩溃,例如“hello”、“yes”。代码将用户输入日期与当前日期进行比较,并执行操作。如何检查以确保用户输入日期而不是纯文本,然后程序才能继续。代码如下: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println("Enter valid date e.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
System.out.println("Enter valid date e.g yyyy-mm-dd: ");
String date = sn.next();
LocalDate startDate = LocalDate.parse(date, formatter); //I don't want the program to accept 'startDate' as test, it should be date of specified förmat before jumping to try and catch.
LocalDateTime lt = LocalDateTime.now();
LocalDate currentDate = lt.toLocalDate(); // for type match, I removed time stamp from the localdatetime
try {
for (obj result : list) {
if (startDate.isBefore(currentDate)) {
System.out.println(result);
} else {
System.out.println("");
}
}
} catch (DateTimeException e) {
System.out.println ( "ERROR: " + e );
}
您可以在循环中捕获DateTimeParseException(在日期无效时抛出)
LocalDate startDate = null;
while(true) {
System.out.println("Enter valid date e.g yyyy-mm-dd: ");
String date = sn.next();
try {
startDate = LocalDate.parse(date, formatter);
break;
} catch(DateTimeParseException ex) {
System.out.println("Invalid date entered!");
}
}
您可以使用正则表达式获取日期中的输入。然后将字符串转换为日期。请参见示例代码:
System.out.print("Please enter Date: ");
String date = console.nextLine();
while(!date.matches("([0-9]{2})\\([0-9]{2})\\([0-9]{4})")) {
System.out.println("Please enter correct date format");
date = console.nextLine();
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse(date, formatter);
有许多方法可以将字符串转换为日期,您可以使用其中任何一种方法。请参阅此链接以获取参考()TrapDateTimeParseException
在调用LocalDate.parse
的过程中加入一个陷阱,以便在遇到错误的输入文本时抛出
try{
ld = LocalDate.parse( input ) ;
} catch ( DateTimeParseException e ) {
… handle bad input from user
}
如果我理解正确:如果用户输入的内容与日期格式不匹配,您根本不想运行此代码,您希望拒绝输入并告诉用户在继续之前输入有效日期?用户输入来自哪里?什么是
sn
?您需要的格式符合ISO 8601,是LocalDate
的默认格式。因此,您可以不使用格式化程序,只使用1-argparse
方法:localdatestartdate=LocalDate.parse(date)代码>。使用您的匹配格式时出错,但当我使用此格式时:^\\d{4}\-(0[1-9]| 1[012])\\-(0[1-9]|[12][0-9]| 3[01])$您的解决方案有效。