我在Java方法中有这个代码块:
colVal = ve.getColumnValues();
System.out.println("Got colVal");
System.out.println("Col values = " + colVal.toString());
try {
Document pDoc = ve.getDocument();
System.out.println("Start MyDate");
DateTime dt = (DateTime) pDoc.getItemValueDateTimeArray("ExpPayDate").get(0);
Date pDate = dt.toJavaDate();
pItem.setMyDate(pDate);
} catch (Exception e) {
// date error
System.out.println("setMyDate Failed "+ e.toString());
}
日志如下所示:
12/09/2015 02:49:59 PM HTTP JVM: Got colVal
12/09/2015 02:49:59 PM HTTP JVM: Col values = [1bp8frg61ze9s, 24/09/2015 12:00:00 PM MDT, , 0.0, ---, , --- No Agent ---, , ]
我使用ViewEntry,因为我需要维护视图排序顺序。
这个问题是ve.getDocument()
意味着额外的服务器之旅并且可能变得相当昂贵。
所以我尝试使用colVal.get(1),它被视为Notes DataTime,但colVal.get(1).toJavaDate()似乎不可用。
更改代码以尝试从colVal获取值:
System.out.println("Got colVal");
System.out.println("Col values = " + colVal.toString());
try {
System.out.println("Start MyDate");
System.out.println("Get value from colVal " + colVal.get(1).toString());
//pItem.setMyDate(pDate);
} catch (Exception e)
System.out.println("setExpPayDate Failed " + e.toString());
}
当我运行这个"从colVal获得价值"导致错误:
12/09/2015 03:05:55 PM HTTP JVM: Start MyDate
12/09/2015 03:05:55 PM HTTP JVM: setMyDate Failed java.lang.ClassCastException: lotus.domino.local.DateTime incompatible with java.lang.String
我可以从文档中做我需要的东西,但似乎无法从viewEntry和ve.getColumnValues()获得。
答案 0 :(得分:6)
直接的解决方案是您需要将对象强制转换为DateTime
以便能够调用toJavaDate
方法。例如:
DateTime dt = (DateTime)colVal.get(1);
Date date = dt.toJavaDate();
这是因为Vector
返回的getColumnValues
会返回Object
个类型值,因为它可以混合使用。
在这种特定情况下,还可以直接将列值作为Date
。如果您在获取列值之前致电entry.setPreferJavaDates(true)
,则日期/时间值将表示为Date
个对象,而不是DateTime
。您仍然可能最终将列值转换为Date
,但这可能是一个小小的便利。它还消除了在循环中执行entry.recycle(colVal)
的需要,以确保列值中的DateTime
被回收。