3

日付と時刻を XML ドキュメントから JodaTime オブジェクトに解析する場合、一般的な変換ユーティリティのセットを使用します。通常は、 が提供するパーサーとフォーマッターを使用しorg.joda.time.format.ISODateTimeFormatます。

ほとんどの場合、これで問題なく動作しますが、今回xs:dateは format の値を持つドキュメントが表示されます2010-08-19Z。これは完全に有効な値ですが、私が試しxs:dateた標準生成のパーサーはどれもISODateTimeFormatそれを受け入れません。LocalDate私が見つけることができる最も近いものはISODateTimeFormat.dateParser()で、かなり奇妙に見える を受け入れますが、受け入れ2010-08-19TZません2010-08-19Z( に注意してくださいT)。

Joda と XML Schema の両方が ISO の日付/時刻の書式設定規則に厳密に従うことになっているのに、どちらかがそうでないか、仕様があいまいであるため、これはすべて非常に腹立たしいことです。

敗北を認めてカスタムフォーマットをハンドロールする前に、ISODateTimeFormatその値を読み取るソースのパーサーを教えてもらえますか?

4

1 に答える 1

1

ISO-8601 によると、「Z」は時間値の一部であると思います。「T」セパレーターは、結合された日付/時刻値を作成するためにのみ使用されます。これを厳密に読むと、'Z' は時刻の値のない日付の後には表示されず、空になる可能性があるため、「奇妙に見える」ことを意味します2010-08-18TZ

これは、xs:date の定義と ISO-8601 の間のわずかなインピーダンスの不一致のようです。

編集: ISO 8601のコピーを見つけました。XML Schema Datatypes仕様 で定義されているような「タイムゾーン日付」の概念は定義していません。

ゼロから作成するのではなく、タイムゾーンを含む xs:date インスタンスを対応する ISO-8601 値に変換し (つまり、'T' を挿入するだけ)、既存のISODateTimeFormat.dateParser().

于 2010-08-19T20:58:21.337 に答える