Jackrabbit dateformat用于比较

时间:2011-03-08 10:48:57

标签: java xpath jackrabbit

我正在使用Jackrabbit来存储我的文件。 现在我想搜索已创建的文档,例如在使用XPATH的特定日期之后。为此,我尝试了类似的事情:

String dateString = date.toString();
//element(*,nt:file)[@jcr:created >= xs:dateTime(dateString)]

日期是班级java.util.Date的对象 dateString的格式为: Wed Mar 16 00:00:00 CET 2011

但是这给了我一个InvalidQueryException,表明dateString是错误的:

  

无效查询:行上的词法错误   1,第136栏。遇到:“0”(48),   之后:“:”表示陈述

所以问题是:xs:dateTime的日期格式是什么?

提前致谢

4 个答案:

答案 0 :(得分:2)

为了完整起见:

我找到了另一种(Jackrabbit / JCR dependend)方式来获取格式正确的日期字符串:

Calendar cal = Calendar.getInstance();
cal.setTime(date);
String dateString = ValueFactoryImpl.getInstance().createValue(cal).getString();

此dateString可与xs:dateTime

的单个arg构造函数一起使用

答案 1 :(得分:2)

对于Jackrabbit,这对我有用:yyyy-MM-dd'T'HH:mm:ss.SSSX2015-12-16T15:16:50.465-02:00)当之前的某些代码已完成日历并完成时:prop.getValue().getString()

无法让Z工作(" Unparseable date")。

答案 2 :(得分:1)

xs:dateTime使用特定模式 - 请参阅herehere。因此,不需要使用date.toString()来生成该格式,而是需要使用合适的DateFormat。像这样:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String dateString = format.format(date);

但是,似乎xs:dateTime的构造函数实际上需要两个args:一个用于日期,一个用于时间。请参阅here

所以我猜你可以用这个:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
DateFormat tf = new SimpleDateFormat("HH:mm:ss");
String dateString = df.format(date);
String timeString = tf.format(date);

答案 3 :(得分:1)

此外,我对JAckRabbit日期格式有一些问题,我需要在两个日期之间获得一些实体:

@createdDate> = xs:dateTime(startDate)  @createdDate< = xs:dateTime(endDate)

我注意到的是:

  1. 使用格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'来解析日期给出的结果不正确(也应该是yyyy-MM-dd'T'HH:mm: ss.SSSZ)但你举了例子: 2012-01-04T23:59:59.999 + 0200而不是 2012-01-04T23:59:59.999 + 02:00(保存在JCR中)

  2. 使用ValueFactoryImpl.getInstance()的解决方案.createValue(cal).getString()有效。