1

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

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

date 是类java.util.Date
dateString 的对象,格式为:Wed Mar 16 00:00:00 CET 2011

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

无效查询:第 1 行第 136 列的词法错误。遇到:“0”(48),之后:“:”for 语句

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

提前致谢

4

4 回答 4

2

只是为了完整起见:

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

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

此 dateString 可以与单个 arg 构造函数一起使用xs:dateTime

于 2011-03-09T07:53:49.757 回答
2

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

无法让 Z 工作(“无法解析的日期”)。

于 2015-12-16T23:53:26.153 回答
1

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

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

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

所以我猜你可以使用这个:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
DateFormat tf = new SimpleDateFormat("HH:mm:ss");
String dateString = df.format(date);
String timeString = tf.format(date);
于 2011-03-08T14:24:13.700 回答
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() 的解决方案有效。

于 2012-01-04T09:35:29.540 回答