Java 用于比较的Jackrabbit数据格式
我正在使用Jackrabbit存储我的文档。 现在,我想使用XPATH搜索在特定日期之后创建的文档。为此,我尝试了以下方法:Java 用于比较的Jackrabbit数据格式,java,xpath,jackrabbit,Java,Xpath,Jackrabbit,我正在使用Jackrabbit存储我的文档。 现在,我想使用XPATH搜索在特定日期之后创建的文档。为此,我尝试了以下方法: String dateString = date.toString(); //element(*,nt:file)[@jcr:created >= xs:dateTime(dateString)] date是类java.util.date的对象 日期字符串格式为:Wed Mar 16 00:00:00 CET 2011 但这给了我一个InvalidQueryExc
String dateString = date.toString();
//element(*,nt:file)[@jcr:created >= xs:dateTime(dateString)]
date是类java.util.date的对象
日期字符串格式为:Wed Mar 16 00:00:00 CET 2011
但这给了我一个InvalidQueryException
,表明dateString是错误的:
无效查询:第行出现词法错误
1,第136栏。遇到:“0”(48),
在语句的“:”之后
所以问题是:xs:dateTime的正确日期格式是什么
提前感谢
xs:dateTime
使用特定模式-请参阅和。因此,为了生成该格式,您需要使用合适的DateFormat
,而不是使用date.toString()。大概是这样的:
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);
xs:dateTime
使用特定模式-请参阅和。因此,为了生成该格式,您需要使用合适的DateFormat
,而不是使用date.toString()。大概是这样的:
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);
为了完整起见: 我找到了另一种(Jackrabbit/JCR依赖)获取格式正确的日期字符串的方法:
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String dateString = ValueFactoryImpl.getInstance().createValue(cal).getString();
此dateString可与
xs:dateTime
的单个参数构造函数一起使用,只是为了完整性:
我找到了另一种(Jackrabbit/JCR依赖)获取格式正确的日期字符串的方法:
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String dateString = ValueFactoryImpl.getInstance().createValue(cal).getString();
此日期字符串可用于
xs:dateTime
的单个arg构造函数。此外,我对JAckRabbit日期格式有一些问题,需要在两个日期之间获取一些实体:
@createdDate>=xs:dateTime(startDate)
@createdDate另外,我对JAckRabbit日期格式有一些问题,我需要在两个日期之间获取一些实体: @createdDate>=xs:dateTime(startDate)
@createdDate对于Jackrabbit这对我来说很有效:
yyyy-MM-dd'HH:MM:ss.SSSX
(2015-12-16T15:16:50.465-02:00
)当以前的某个代码使用日历并完成时:prop.getValue().getString()
无法让Z工作(“不可解析的日期”)。对于Jackrabbit,这对我有效:
yyy-MM-dd'HH:MM:ss.SSSX
(2015-12-16T15:16:50.465-02:00
)当以前的某个代码使用日历并完成时:prop.getValue().getString()
无法让Z正常工作(“无法解析的日期”)。谢谢您的回复。看起来这是一个正确的答案,但在尝试此操作时,我得到一条消息:
无效查询:无法解析xs:dateTime:2011-02-28T00:00:00的字符串文字。
。使用两个参数构造函数没有帮助,请尝试使用两个参数构造函数获取日期时间。仍在获取解析错误。但是我找到了正确的格式:yyyy-MM-dd'T'HH:MM:ss.SSS'Z'
。由于我通过阅读您的链接发现了这一点,我将接受您的答案;)谢谢你的回复。看起来这是一个正确的答案,但在尝试此操作时,我得到一条消息:无效查询:无法解析xs:dateTime:2011-02-28T00:00:00的字符串文字。
。使用两个参数构造函数没有帮助,请尝试使用两个参数构造函数获取日期时间。仍在获取解析错误。但是我找到了正确的格式:yyyy-MM-dd'T'HH:MM:ss.SSS'Z'
。由于我通过阅读您的链接发现了这一点,我将接受您的答案;)为了更完整一点,从JackrabbitSession.getValueFactory()
方法中获取ValueFactory
的实例,这样就不需要引用实现类。为了更完整一点,从JackrabbitSession.getValueFactory()中获取ValueFactory
的实例
方法,因此不需要对实现类的引用。