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

しかし、これはInvalidQueryExceptiondateString が間違っていることを示す を私に与えています:

無効なクエリ: 行 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 は、単一引数コンストラクターで使用できます。xs:dateTime

于 2011-03-09T07:53:49.757 に答える
2

Jackrabbit の場合、これは私にとってはうまくいきました: yyyy-MM-dd'T'HH:mm:ss.SSSX ( 2015-12-16T15:16:50.465-02:00) 以前のコードが Calendar を取得して実行したとき:prop.getValue().getString()

Z を機能させることができませんでした (「解析不能な日付」)。

于 2015-12-16T23:53:26.153 に答える
1

また、JAckRabbit の日付形式に問題があり、2 つの日付の間にいくつかのエンティティを取得する必要がありました。

@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+02:00 の代わりに 2012-01-04T23:59:59.999+0200 (JCR に保存)

  2. ValueFactoryImpl.getInstance().createValue(cal).getString() を使用したソリューションが機能します。

于 2012-01-04T09:35:29.540 に答える
1

xs:dateTimeは特定のパターンを使用します。ここここを参照してください。そのため、date.toString() を使用する代わりに、その形式を生成するには、適切なDateFormat. このようなもの:

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

ただし、実際には xs:dateTime のコンストラクターには、日付用と時刻用の 2 つの引数が必要なようです。ここを参照してください。

だから私はあなたがこれを使うことができると思います:

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 に答える