0

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

在 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)

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

4

1 回答 1

0

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

你在调用 Long.valueOf 之前检查了approvalDateInMillis 的值是多少?

你可以添加例如

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

在返回语句之前,然后继续调试以查看数据库中真正的内容。

于 2012-12-06T11:22:01.627 回答