我正在使用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的日期格式是什么?
提前致谢
答案 0 :(得分:2)
为了完整起见:
我找到了另一种(Jackrabbit / JCR dependend)方式来获取格式正确的日期字符串:
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String dateString = ValueFactoryImpl.getInstance().createValue(cal).getString();
此dateString可与xs:dateTime
答案 1 :(得分:2)
对于Jackrabbit,这对我有用:yyyy-MM-dd'T'HH:mm:ss.SSSX
(2015-12-16T15:16:50.465-02:00
)当之前的某些代码已完成日历并完成时:prop.getValue().getString()
无法让Z工作(" Unparseable date")。
答案 2 :(得分:1)
xs:dateTime
使用特定模式 - 请参阅here和here。因此,不需要使用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)
我注意到的是:
使用格式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中)
使用ValueFactoryImpl.getInstance()的解决方案.createValue(cal).getString()有效。