Java Date异常处理尝试catch

时间:2010-03-25 03:42:55

标签: java exception-handling formatting parseexception

Java中是否存在某种异常以捕获无效的Date对象?我试图在以下方法中使用它,但我不知道要查找什么类型的异常。是ParseException。

public boolean setDate(Date date) {
        this.date = date;                
        return true;
    }

4 个答案:

答案 0 :(得分:3)

在您提供的方法中,无法捕获异常,因为简单赋值不会抛出任何异常。您所能做的就是以下变化:

if(date == null) return false;

但即便如此也不优雅。您可能希望对this.date执行某些操作,或者如果这是所需行为,则抛出异常。

你真正想要的是:

  1. ParseException - DateFormat对象在尝试parse()时抛出,这将在您的set方法之前发生
  2. IllegalArgumentException - 由SimpleDateFormat构造函数抛出,同样会在set方法之前发生。表示您提供了无效的格式字符串。
  3. 你想要抓住其中一个(可能是#1)。但是必须在之前进行方法调用。获得Date个对象后,该对象为null或有效。

答案 1 :(得分:3)

这可能与原始问题无关。但是您必须注意方法名称,即setDate()。你觉得它听起来会回归吗?或者如果可能,那么你认为在那里返回boolean是个好主意吗? IMO,做这样的事情,

public void setDate(Date date) {
    this.date = date;                
}

public boolean isDateNull() { // or something
    return this.date == null;                
}

答案 2 :(得分:2)

在此方法中,无需担心异常。您进入此方法时已创建日期。如果您正在解析日期,那么它将在此代码之外完成。您可以做的最好的事情是确保日期不为空。

答案 3 :(得分:2)

这取决于无效日期的含义。你的意思是给我们一个看起来更像这样的方法签名吗?

public void setDate(String date) throws ParseException {
   this.date = SomeDateFormat.getInstance().format(date);
}

否则,正如其他人所说的那样,将Java日期对象分配给字段的简单行为不应该是例外,因为它既是Date的实例,也是null。

如果您只是想将字符串解析为java.util.Date,请查看DateFormat,FastDateFormat(apache,线程安全)或Joda Time。