2016-12-06 7 views
-2

以下のテストを実行すると、 "2016-11-11"が出力されます。ここで何が起こっているのですか?入力として提供されたDateTime文字列を出力するにはどうすればよいですか?JOD ISODateTimeFormatシリアライズ/デシリアライズ

import org.joda.time.DateTime; 
 
import org.junit.Test; 
 

 
public class Adapter2 
 
    extends XmlAdapter<String, DateTime> 
 
{ 
 

 

 
    public DateTime unmarshal(String value) { 
 
     return (org.joda.time.format.ISODateTimeFormat.dateTimeParser().parseDateTime(value)); 
 
    } 
 

 
    public String marshal(DateTime value) { 
 
     return (org.joda.time.format.ISODateTimeFormat.dateTime().print(value)); 
 
    } 
 
    
 
    @Test 
 
    public void test() 
 
    { 
 
     System.out.println(new Adapter3().marshal(new Adapter3().unmarshal("2016-11-12T00:00:00.000+08:00"))); 
 
    } 
 

 
}

+0

このテストでは、Adapter3が使用されています。あなたはAdapter2のコードを投稿しました。 –

+0

@JBNizet指摘してくれてありがとう。 Adaptor2に変更すると、同じ結果が得られます。 (これを修正するために元の投稿を編集できません) – vivid

+0

問題は何ですか?このテストを実行すると、 "2016-11-11"が印刷されません。私のタイムゾーンがUTCより1時間遅れているヨーロッパ/パリであるとすれば、期待される出力である2016-11-11T17:00:00.000 + 01:00が表示されます。あなたは何を本当に**出力として持っていますか?代わりに何を期待していますか?なぜですか? –

答えて

1

利用DateTime.parse()の代わりISODateTimeFormat.dateTimeParser().parseDateTime()。またはDateTime.parse()が使用するものを使用してください:

ISODateTimeFormat.dateTimeParser().withOffsetParsed().parseDateTime(value) 
関連する問題