java.text.ParseException:无法解析日期,但代码仍然有效

时间:2016-07-08 07:51:12

标签: java simpledateformat parseexception

我正在尝试创建一个服务,对数据库执行一系列操作,然后返回一组信息。
在这些信息中,有一系列客户的诞生日期。
当我尝试解析(然后格式化)这个日期时,我在标题中得到错误。
奇怪的是,即使异常被提出,代码仍然编译并运行没有问题给我我期望的结果...
这是方法:

    public String getDataNascitaFormattata() {  
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    Date data = null;
    try {
        data = sdf.parse(dataNascita);
        dataNascita = new SimpleDateFormat("dd/MM/yyyy").format(data);
    } catch (ParseException e) {
        System.err.println(e);
    }
    return dataNascita;
}

这是一个例子:
初始生日:“1969-09-07 00:00:00.0”
期望的生日: 07/09/1969
错误: java.text.ParseException:无法解析的日期:“07/09/1969”
结果(抛出异常):

enter image description here


编辑:我已经尝试添加语言环境,但异常仍然被抛出......


编辑2:这是一张以更好的方式解释情况的图片。
enter image description here

2 个答案:

答案 0 :(得分:2)

我猜dataNascita已经是字符串'07/09/1969',这就是解析失败但返回所需值并且程序正常工作的原因。 所以你试图将一个String解析成一个对象,然后用与原始String相同的格式重新格式化它!

请运行以下代码段并检查您的数据

String dataNascita = "1969-09-07 00:00:00.0";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
Date data = null;
try {
    data = sdf.parse(dataNascita);
    dataNascita = new SimpleDateFormat("dd/MM/yyyy").format(data);
} catch (ParseException e) {
    System.err.println(e);
}
System.out.println(dataNascita);


dataNascita = "07/09/1969";
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
data = null;
try {
    data = sdf.parse(dataNascita);
    dataNascita = new SimpleDateFormat("dd/MM/yyyy").format(data);
} catch (ParseException e) {
    System.err.println(e);
}
System.out.println(dataNascita);

答案 1 :(得分:0)

我假设dataNascita是一个字段(似乎没用)。

您捕获异常并将其打印到stderr。因此编程继续并返回分配给dataNascita

的最后一个值

编辑: 您最有可能想要做以下一个

  • 抛出异常
  • 在其他地方捕捉异常
  • dataNascita
  • 分配“不适用”的价值

您还应该想知道为什么使用dataNascita字段(假设这是基于代码的情况)。