从ViewEntry获取Notes日期时间到JAVA日期

时间:2015-09-12 21:16:36

标签: java datetime xpages

我在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()获得。

1 个答案:

答案 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被回收。