如何在2nd if块中使用date1的更新值显示错误“无法解析日期1”

ymdaylpp  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(311)

公开课考试{

public static void check1 (String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); 
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy"); 

     if(date.matches("^\\w+.+")) {
        Date date1 = sdf2.parse(date);
    }
    else {
        Date date1 = sdf1.parse(date);
    }

    Date current  = new Date(); 

    if(date1.compareTo(current)<-1) {
        System.out.println("In Past");
    }
    else {
        System.out.println("Same or future date");
    }

如何在second if块中使用date1的更新值。

uubf1zoe

uubf1zoe1#

您已经在一个作用域中声明了您的变量,当您关闭括号时,该作用域将结束,也就是说,在此之后它将不再处于活动状态。你能做的就是把它拿出来:

public static void check1 (String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy"); 
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy"); 
    Date date1;
     if(date.matches("^\\w+.+")) {
        date1 = sdf2.parse(date);
    }
    else {
        date1 = sdf1.parse(date);
    }

    Date current  = new Date(); 

    if(date1.compareTo(current)<-1) {
        System.out.println("In Past");
    }
    else {
        System.out.println("Same or future date");
    }
}
waxmsbnn

waxmsbnn2#

变量只在它声明的范围内可见(在它的{和}之间)。
在if和else块的范围内声明了2个date1变量(date date1)。因此,它们在外部不可见(它们实际上不存在于这些范围之外)。
你需要在外面申报:

public static void check1(String date) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM dd, yyyy");

    Date date1; // <- declare date1 here
    if (date.matches("^\\w+.+")) {
        date1 = sdf2.parse(date);
    } else {
        date1 = sdf1.parse(date);
    }

    Date current = new Date();

    if (date1.compareTo(current) < -1) {
        System.out.println("In Past");
    } else {
        System.out.println("Same or future date");
    }
}

相关问题