2011-12-13 6 views
1

すべてのXACMLデータをサポートするためにJodaを使用しようとしていますが、 "P50DT4H4M3S"のような文字列から解析時間を取得するのに問題があります。私は問題がISOであると考えています.W3Cはある時点で方法を分割し、JodaはISOパスをサポートしています。XML Schema/XACMLのJodaTime継続時間タイプ

いずれにしても、ギャップを埋める簡単な方法があります。可能であれば、私自身のパーサを構築することを避けたい。

私は、Jodaを使用して回避することを望んでいたGregorianCalendarに基づいていることを除いて、私が必要とするように見えるjavax.xml型を認識しています。

+0

持続時間は、カレンダーとは無関係です。継続時間文字列を線形時間(秒、ミリ秒、何でも)として解析します。あなたはそれから、あなたが望む任意の日付クラス/カレンダーシステムで日付計算でそれを使用できるはずです。 – dthorpe

+0

FWIWでは、W3Cの期間はSOAPによってサポートされているようです。 Java用のSOAP libを見つけて、その関数の1つを使用して期間文字列を解析できるかどうかを確認してください。 .NETでは、System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDurationを使用します。 – dthorpe

+0

必要な形式を解析するパッケージが多数あります。 javax.xml。*を使用して名前を付けます。問題は、他の場所で使用しているJoda DateTimeや他の多くのものと相互運用できないため、Durationを実際に作成する必要があることです。 – Bradjcox

答えて

3

P50DT4H4M3Sは、Joda-Timeの用語ではPeriodであり、PeriodFormatterを使用して解析できます。 ISOPeriodFormatに標準パーサーがあります。このような

+1

FYI:XACML 2.0準拠テストIIC003には、joda Periodパーサーが処理しないYearMonthDurationが「-P1Y2M」のテストが1つあります。どちらが間違っているのか分かりません。ちょうどあなたが知るべきだと思った私は今のところXacml3.0コンパイラでそれをハックしました。 – Bradjcox

+0

FWIWこの問題が発生したのは、XACMLはDurationという名前とはまったく異なる何かを提供している間にJodaTimeがPeriodを呼び出すことを意味していたからです。素晴らしい基準はありませんか? ;) – Bradjcox

0

何か:

PeriodFormatter formatter = ISOPeriodFormat.standard(); 
Period period = asd.parsePeriod(periodString); 
Duration duration = dsa.toStandardDuration(); 
関連する問題