【问题标题】:java.lang.NumberFormatException: For input string: "04/12/2012 14:44"java.lang.NumberFormatException:对于输入字符串:“04/12/2012 14:44”
【发布时间】:2012-12-06 11:11:51
【问题描述】:

我有一个程序,代码如下:

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

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

在 YYY.java 中,我使用 new Date(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)

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

【问题讨论】:

    标签: exception numbers format


    【解决方案1】:

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

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

    你可以添加例如

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

    在return语句之前,然后继续调试,看看数据库里到底有什么。

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2013-08-06
      相关资源
      最近更新 更多