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

Bil*_*l F 1 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());
    }
Run Code Online (Sandbox Code Playgroud)

日志看起来像这样:

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 ---, , ]
Run Code Online (Sandbox Code Playgroud)

我使用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());
} 
Run Code Online (Sandbox Code Playgroud)

当我运行这个"从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
Run Code Online (Sandbox Code Playgroud)

我可以从文档中做我需要的东西,但似乎无法从viewEntry和ve.getColumnValues()中获得.

Jes*_*her 6

直接的解决方案是您需要将对象强制DateTime转换为能够调用该toJavaDate方法.例如:

DateTime dt = (DateTime)colVal.get(1);
Date date = dt.toJavaDate();
Run Code Online (Sandbox Code Playgroud)

这是因为Vector返回的getColumnValues返回Object值,因为它可以混合.

在这种特定情况下,还有一种方法可以Date直接获取列值.如果entry.setPreferJavaDates(true)在获取列值之前调用,则日期/时间值将表示为Date对象而不是DateTime.Date无论如何,你仍然可能最终将列值转换为,但这可能是一个小的便利.它还消除了entry.recycle(colVal)在循环内部进行操作以确保DateTime回收列值中的s 的需要.