从 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
类型)。
我在我的 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
类型)。