我有一个包含以下代码的程序:
在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)
我已经检查了数据库,数据库中的许多记录都可以正常处理,除了这一个。我可以知道这个错误的可能原因是什么?我想模拟问题,但我不知道如何复制它。有人有什么建议吗?
答案 0 :(得分:0)
听起来数据库中的某条记录已插入错误版本,或者数据库已损坏。
在调用Long.valueOf之前,您是否检查了approvalDateInMillis的值是什么?
你可以添加例如。
if (!approvalDateInMillis.matches("^[0-9+]$"))
throw new Error(
String.format("Invalid approvalDateInMillis format: '%s'", approvalDateInMillis));
在返回语句之前然后继续调试以查看数据库中的实际内容。