从 Java 中的字段获取日期值的 XPages ODA 问题

XPages ODA issue with getting a date value from a field in Java

我在我的 Java 代码中使用 ODA(这很棒),但我在从字段中获取日期值时遇到了问题。

如果我使用:

DateTime lastApprDt = doc.getItemValue("LastApproved", Date.class);

然后解析器反对并建议 "change type of lastApprDt to Date"

如果我将代码更改为:

Date lastApprDt = doc.getItemValue("LastApproved", Date.class);

然后解析器很高兴但是当我 运行 代码时我得到一个错误:

[ODA::WARNING] Auto-boxing requested a com.ibm.security.util.calendar.BaseCalendar$Date but is returning a org.openntf.domino.impl.DateTime in item LastApproved for document id 992

我很困惑!如果 doc.getItemValue("LastApproved", Date.class) returns 是 Date 类型那么为什么会出现错误?

第一个失败,因为它试图将 Date 对象(getItemValue() 的输出)传递到 DateTime 对象 (lastApprDate)。

我不太确定为什么它选择将其检索为 com.ibm.security.util.calendar.BaseCalendar.Date,我在 ODA 代码中看不到任何对 class 的引用。值得检查代码中的导入语句,以确保未选择 com.ibm.security.util.calendar.BaseCalendar.Date 作为它认为您要使用的相关日期 class。我怀疑它可能已经完成了。如果是这样,请将导入语句更改为使用 java.util.Date.

自动装箱日期的代码查找特定的 classes 以及如何转换它们。 java.util.Date 是它所期望的最明显的一个。我最近添加了 java.sql.Date,我相信这是最后一个 base 9.0.1 和第一个 FP8 版本。 java.util.Calendar 是另一个支持的。像 LocalDateTime 这样的新 Java 8 Date classes 可能看起来不错,因为它们有更好的时区处理,但是将 DateTime 时区转换为 Java 时区并不容易DateTime 中的时区是只读的,因此目前无法用于自动装箱。

您不需要传递完整的 class 名称作为第二个参数,我有代码 运行 只传递 Date.class。这就是让我怀疑解析器建议猜错了你想要的 class 并导入 com.ibm.security.util.calendar.BaseCalendar.Date 的原因。

如果您确定该字段包含日期值,您应该能够获得 java.util.Date

Date lastApprDt = doc.getItemValue("LastApproved").get(0).toJavaDate();

确保 lastApprDt 日期是 java.util.Date 类型(而不是 com.ibm.security.util.calendar.BaseCalendar.Date 类型)。