1

java.util.Date を XMLGregorianDate に変換しています。

コンソールに My util date を出力すると、次のように表示されます。

日付: 2011-01-25 20:33:46.54

しかし、変換後に使用しようとすると、次の例外が発生します: org.springframework.ws.soap.client.SoapFaultClientException: Invalid value 0 for Month field.

Code for Date conversion is:
 DatatypeFactory df = null;

                    try {
                        df = DatatypeFactory.newInstance();
                    } catch (DatatypeConfigurationException e) {
                        e.printStackTrace();
                    }

            GregorianCalendar gc = new GregorianCalendar();
            gc.setTimeInMillis(account.getCreationDate().getTime());

method returns: df.newXMLGregorianCalendar(gc);

また興味深いのは、util Date.getYear() および getMonth() メソッド (コンソールに日付を表​​示するためだけに使用される非推奨のメソッド) を表示すると、コンソールの出力が次のようになることです。

年: 111 月: 0

なぜこれが起こっているのですか?誰かがこの背後にある理由を教えてもらえますか? 前もって感謝します。

4

2 に答える 2

3

XMLGregorianCalendar、例には表示されていませんが、1 から始まる月数を使用しています。java.util.Calendar0 ベースの月数を使用するクラスとは異なります。

于 2011-04-01T06:45:51.913 に答える
1

1900 年からの年数を返しdate.getYear()date.getMonth()0から始まる月を返します。確かにクレイジーな API ですが、それが文書化されている方法です。getYear()getMonth()

ただし、変換コードはあまり明確ではありませ df。同様に、XMLGregorianDateあなたのコードには の言及が見当たりません...問題を示す短いが完全なプログラムを教えていただけますか? 構築して実行できるものはありますか?

副次的な問題として、一般的に、可能であれば java.util.{Date,Calendar} の代わりにJoda Timeを使用することを心からお勧めします。この特定の状況では役に立たないかもしれませんが、組み込みクラスの多くの不適切な設計上の決定を回避し、より正確に意味するもの (現地の日付、現地時間など) を表現できるようにします。

于 2011-04-01T06:07:10.200 に答える