使用SimpleDateFormat时出现ParseException的原因

时间:2016-12-09 10:40:43

标签: java parseexception

我用eclipse编写了下面的代码:

String d = "2014-6-1 21:05:36";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
Date date =sdf.parse(d);        
System.out.print(date);

并且第4行抛出Unhandled exception type ParseException.

但如果我写:

try {
  String d = "2014-6-1 21:05:36";   
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
  Date date =sdf.parse(d);      
  System.out.print(date);
} catch(ParseException e) {
  e.printStackTrace();
  System.out.print("you get the ParseException");
}

或在主方法

的开头添加throws ParseException
public static void main(String[] args) throws ParseException {
  String d = "2014-6-1 21:05:36";
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
  Date date =sdf.parse(d);      
  System.out.print(date);
}

他们都运作良好......我的代码出了什么问题?我在catch块使用方法printStackTrace(),但为什么我看不到ParseException?

2 个答案:

答案 0 :(得分:2)

这与您实际获得异常无关。但是你的String可能是错误的格式(事实并非如此)。在这种情况下,你会得到一个例外。

因此编译器希望您处理该异常。你要么必须重新抛出它,要么抓住它。但是:您实际上没有使用您的代码获得异常。这是为了防万一有异常。

答案 1 :(得分:0)

在任何 IDE (集成开发环境)中,编辑器会显示在编译时未解析的编译类型错误。

您正在观察IDE在您的情况下的行为,sdf.parse(d);意味着它可以在运行时抛出一个解析异常,因此您必须按顺序处理它。否则程序将崩溃。

在你的第二个代码段中,它会在发生时捕获一个解析异常,并为您的记录显示异常e.printStackTrace();,代码不会崩溃,即exit(0)exit(1)错误,more

在你的最后一段代码片段中,方法已经被删除,它可能会抛出异常,所以如果它从任何其他来源调用,应该处理,比如try catch。

您可以使用这两种解决方案中的任何一种,只是您的选择。

更多

以下是SimpleDateFormat

中的方法签名
public Date parse(String source) throws ParseException

所以这个抛出表明当调用这个方法时必须处理