在Java中,从字段中获取日期值是一个问题

在Java中,从字段中获取日期值是一个问题,java,xpages,Java,Xpages,我在Java代码中使用ODA(这很好),但从字段中获取日期值时遇到了问题 如果我使用: DateTime lastApprDt = doc.getItemValue("LastApproved", Date.class); 然后解析器反对并建议“将lastApprDt的类型更改为Date” 如果我将代码更改为: Date lastApprDt = doc.getItemValue("LastApproved", Date.class); 然后解析器很高兴,但当我运行代码时,我得到一个错误:

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

如果我使用:

DateTime lastApprDt = doc.getItemValue("LastApproved", Date.class);
然后解析器反对并建议“将lastApprDt的类型更改为Date”

如果我将代码更改为:

Date lastApprDt = doc.getItemValue("LastApproved", Date.class);
然后解析器很高兴,但当我运行代码时,我得到一个错误:

[ODA::WARNING]自动装箱请求了com.ibm.security.util.calendar.BaseCalendar$日期,但正在返回文档id 992的LastApproved项中的org.openntf.domino.impl.DateTime


我糊涂了!如果doc.getItemValue(“LastApproved”,Date.class)返回日期类型,那么为什么会出现错误?

第一个失败,因为它试图将日期对象(来自
getItemValue()
的输出)传递到DateTime对象(
LastAppDate
)中

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

自动装箱日期代码查找特定类以及如何转换它们
java.util.Date
是它期望的最明显的一个。我最近添加了
java.sql.Date
,我相信是最后一个base 9.0.1和第一个FP8版本
java.util.Calendar
是另一个受支持的。像LocalDateTime这样的新Java 8日期类似乎是很好的候选者,因为它们具有更好的时区处理能力,但是将
DateTime
时区转换为Java时区并不容易,并且DateTime中的时区是只读的,所以此时自动装箱不起作用


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

第一个失败,因为它试图将日期对象(来自
getItemValue()
的输出)传递到DateTime对象(
lastApprDate
)中

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

自动装箱日期代码查找特定类以及如何转换它们
java.util.Date
是它期望的最明显的一个。我最近添加了
java.sql.Date
,我相信是最后一个base 9.0.1和第一个FP8版本
java.util.Calendar
是另一个受支持的。像LocalDateTime这样的新Java 8日期类似乎是很好的候选者,因为它们具有更好的时区处理能力,但是将
DateTime
时区转换为Java时区并不容易,并且DateTime中的时区是只读的,所以此时自动装箱不起作用


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

如果您确定该字段包含日期值,您应该能够使用

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

如果您确定该字段包含日期值,则应该能够使用

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

确保LastAppDT日期的类型为
java.util.Date
(而不是
com.ibm.security.util.calendar.BaseCendar.Date
)。

确保LastAppDT日期的类型为
java.util.Date
(而不是
com.ibm.security.util.calendar.BaseCendar.Date
).

确保该日期是java.util.Date(而不是com.ibm.security.util.calendar.BaseCalendar.Date)。谢谢,这很有效。我犯了使用Eclipse建议的类的错误:)Per,请您添加您的注释作为答案,以便我可以将其标记为已接受。谢谢。添加了简单答案:-)确保日期是java.util.Date(而不是com.ibm.security.util.calendar.BaseCalendar.Date)。谢谢,这很有效。我犯了使用Eclipse建议的类的错误:)Per,请您添加您的注释作为答案,以便我可以将其标记为已接受。Thank.simple answer added:-)正如您所猜测的,我选择导入
com.ibm.security.util.calendar.BaseCalendar.Date,因为解析器建议这样做。我提醒自己不要对未来如此信任正如您所猜测的,我选择导入
com.ibm.security.util.calendar.BaseCalendar.Date,因为解析器建议这样做。我提醒自己不要对未来如此信任D