Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中检查用户输入是纯文本还是日期_Java_Datetime - Fatal编程技术网

如何在java中检查用户输入是纯文本还是日期

如何在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.

我有下面的java代码,如果用户输入指定格式的日期,例如2011-11-11,它可以工作,但是当用户输入纯文本时,程序崩溃,例如“hello”、“yes”。代码将用户输入日期与当前日期进行比较,并执行操作。如何检查以确保用户输入日期而不是纯文本,然后程序才能继续。代码如下:

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);
有许多方法可以将字符串转换为日期,您可以使用其中任何一种方法。请参阅此链接以获取参考()

Trap
DateTimeParseException
在调用
LocalDate.parse
的过程中加入一个陷阱,以便在遇到错误的输入文本时抛出

try{
    ld = LocalDate.parse( input ) ;
} catch ( DateTimeParseException e ) {
    … handle bad input from user
}

如果我理解正确:如果用户输入的内容与日期格式不匹配,您根本不想运行此代码,您希望拒绝输入并告诉用户在继续之前输入有效日期?用户输入来自哪里?什么是
sn
?您需要的格式符合ISO 8601,是
LocalDate
的默认格式。因此,您可以不使用格式化程序,只使用1-arg
parse
方法:
localdatestartdate=LocalDate.parse(date)。使用您的匹配格式时出错,但当我使用此格式时:^\\d{4}\-(0[1-9]| 1[012])\\-(0[1-9]|[12][0-9]| 3[01])$您的解决方案有效。