首页 > 解决方案 > Java 范围问题:try-catch 块,将 String 解析为 Date

问题描述

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

/代码片段/

           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); 

标签: javaparsingtry-catchsimpledateformat

解决方案


您需要在 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();
}

推荐阅读