2012-02-12 14 views
4

私はXStreamを使用してxmlに変換すると、ミリ秒とゾーンで時間を与えます。私はちょうど"MMMM dd, yyyy HH:mm:ss"としてそれを変換するか、またはフォーマットする必要があります。どのようにXStreamを使用してそれを行うには?私はゲッターとセッターを変更したくありません。ありがとう。フォーマット日付XStreamの文字列へのフィールド

私のクラス:

public class Datas { 
    private String name; 
    private Calendar dob; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Calendar getDob() { 
     return dob; 
    } 

    public void setDob(Calendar dob) { 
     this.dob = dob; 
    } 

    public static void main(String[] args) { 
     Datas datas = new Datas(); 
     datas.setName("Ahamed"); 
     datas.setDob(Calendar.getInstance()); 
     XStream stream = new XStream(); 
     System.out.println(stream.toXML(datas)); 
    } 
} 

出力:私はゲッターとセッターを変更することなく、DOBタグをフォーマットしたい

<Datas> 
    <name>Ahamed</name> 
    <dob> 
    <time>1329081818801</time> 
    <timezone>Asia/Calcutta</timezone> 
    </dob> 
</Datas> 

。ありがとう。

+0

巨大なXMLのように?例がありますか? –

+1

[XStream - Converter Tutorial](http://xstream.codehaus.org/converter-tutorial.html)を参照してください。日付変換に関するセクションがあります。 – mre

+0

@mreリンクをありがとう! – Ahamed

答えて

4

カスタムコンバータ:

public class DateConverter implements Converter { 

    private SimpleDateFormat formatter = new SimpleDateFormat(
      "MMMM dd, yyyy HH:mm:ss"); 

    public boolean canConvert(Class clazz) { 
     // This converter is only for Calendar fields. 
     return Calendar.class.isAssignableFrom(clazz); 
    } 

    public void marshal(Object value, HierarchicalStreamWriter writer, 
      MarshallingContext context) { 
     Calendar calendar = (Calendar) value; 
     Date date = calendar.getTime(); 
     writer.setValue(formatter.format(date)); 
    } 

    public Object unmarshal(HierarchicalStreamReader reader, 
      UnmarshallingContext context) { 
     GregorianCalendar calendar = new GregorianCalendar(); 
     try { 
      calendar.setTime(formatter.parse(reader.getValue())); 
     } catch (ParseException e) { 
      throw new ConversionException(e.getMessage(), e); 
     } 
     return calendar; 
    } 
} 

次のようにXStreamのオブジェクトに上記のコンバータを登録しますが:

XStream xStream = new XStream(); 
xStream.registerConverter(new DateConverter()); 

xStreamオブジェクトは、カレンダーのフィールドと意志を探しますカスタムコンバータで定義されているマーシャル。

0

marshalメソッドの下で希望通りに日付形式を変更するカスタムコンバータを使用する必要があります。
DOBノードの後に​​行う必要があります。
非マーシャルメソッドで何もする必要はないと思います。
グッドラック:) Calendarフィールドの

9

簡単な方法は、例えば、適切なフォーマットと(XStreamの!)DateConverterを登録することです。:

import com.thoughtworks.xstream.converters.basic.DateConverter; 

XStream xstream = new XStream(); 
String dateFormat = "yyyyMMdd"; 
String timeFormat = "HHmmss"; 
String[] acceptableFormats = {timeFormat}; 
xstream.registerConverter(new DateConverter(dateFormat, acceptableFormats)); 

これは私の作品と私は新しいコンバータクラスを作成する必要はありませんでした。

関連する問題