Java 范围问题:try-catch 块,将字符串解析为日期

Java Scope Issues: try-catch block, parsing String to Date

我正在尝试将字符串转换为 Java 中的日期变量。为了尝试这样做,我正在尝试一种解析方法,它需要一个 try-catch 块,但我遇到了范围问题。由于日期在 try 块中,我的 Employee 构造函数中的变量“date”没有收到日期。我收到错误:“日期无法解析为变量”。 -- 请让我知道您的想法,或者我是否可以用更简单的方式将字符串转换为日期。谢谢!

/代码段/

           String stringDate = sc.next();
           SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
           
           try {
               Date date = dateFormatter.parse(stringDate);
               
           }catch(ParseException e) {e.printStackTrace();}
         

           e = new Employee(id, login, salary, date, name); 

您需要在 try 范围外定义变量,然后在内部使用它。此代码将符合您的期望:

String stringDate = sc.next();
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
Date date = null;        

try {
    date = dateFormatter.parse(stringDate);
} catch(ParseException e) {
    e.printStackTrace();
}

e = new Employee(id, login, salary, date, name); 

您现在需要注意,当您创建新员工时,日期可能为空。因此,您甚至可以更进一步,仅当日期不为空时才这样做。但是在你这里的代码片段中,变量 e 无论如何都没有定义(或者只是在 catch 块中使用)。

String stringDate = sc.next();
SimpleDateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");

try {
    Date date = dateFormatter.parse(stringDate);
    e = new Employee(id, login, salary, date, name); 
} catch(ParseException e) {
    e.printStackTrace();
}