java.lang.NumberFormatException:对于输入字符串:“04/12/2012 14:44”

时间:2012-12-06 11:11:52

标签: exception numbers format

我有一个包含以下代码的程序:

在XXX.java中,我使用 String.valueOf(date.getTime())强文本设置SVC_APPR_DT_IN_MILLIS,其中包含从Oracle数据库中的记录获取的日期值。它存储为String:

private void setApprovalDateProperty(Date date) {
    setAdditionalProperty(SVC_APPR_DT_IN_MILLIS, String.valueOf(date.getTime()));
}

在YYY.java中,我使用新日期(Long.valueOf())

返回日期
private Date getApprovalDate() throws ParseException {
    String approvalDateInMillis = this.record
        .getAdditionalProperty(XXX.SVC_APPR_DT_IN_MILLIS);
    return new Date(Long.valueOf(approvalDateInMillis));
}

对于其中一条记录,它会抛出以下错误,其中“04/12/2012 14:44:38”是数据库中记录的日期。

For input string: "04/12/2012 14:44"
java.lang.NumberFormatException: For input string: "04/12/2012 14:44"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:412)
    at java.lang.Long.valueOf(Long.java:518)
    at YYY.getApprovalDate(YYY.java:634)

我已经检查了数据库,数据库中的许多记录都可以正常处理,除了这一个。我可以知道这个错误的可能原因是什么?我想模拟问题,但我不知道如何复制它。有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

听起来数据库中的某条记录已插入错误版本,或者数据库已损坏。

在调用Long.valueOf之前,您是否检查了approvalDateInMillis的值是什么?

你可以添加例如。

if (!approvalDateInMillis.matches("^[0-9+]$"))
  throw new Error(
    String.format("Invalid approvalDateInMillis format: '%s'", approvalDateInMillis));
在返回语句之前

然后继续调试以查看数据库中的实际内容。