15

次の値を含む属性を持つ XML 応答を受け取りました。

Wed Sep 05 10:56:13 CEST 2012

モデル クラスで、注釈付きのフィールドを定義しました。

@Attribute(name = "regDate")
private Date registerDate;

ただし、例外がスローされます。

java.text.ParseException: Unparseable date: "Wed Sep 05 10:56:13 CEST 2012" (at offset 0)

SimpleFrameworkの注釈で日付形式を定義することは可能ですか?

この日付文字列をカバーする形式は何ですか?

4

1 に答える 1

36

SimpleXML は一部DateFormatの のみをサポートします:

  • yyyy-MM-dd HH:mm:ss.S z
  • yyyy-MM-dd HH:mm:ss z
  • yyyy-MM-dd z
  • yyyy-MM-dd

(各文字の意味については、SimpleDateFormat API Doc (Java SE 7)を参照してください)

Transformしかし、他のフォーマットを扱うカスタムを書くことは可能です:

変身

public class DateFormatTransformer implements Transform<Date>
{
    private DateFormat dateFormat;


    public DateFormatTransformer(DateFormat dateFormat)
    {
        this.dateFormat = dateFormat;
    }



    @Override
    public Date read(String value) throws Exception
    {
        return dateFormat.parse(value);
    }


    @Override
    public String write(Date value) throws Exception
    {
        return dateFormat.format(value);
    }

}

対応する注釈

@Attribute(name="regDate", required=true) /* 1 */
private Date registerDate;

注 1: required=trueオプションです

それの使い方

// Maybe you have to correct this or use another / no Locale
DateFormat format = new SimpleDateFormat("EE MMM dd HH:mm:ss z YYYY", Locale.US);


RegistryMatcher m = new RegistryMatcher();
m.bind(Date.class, new DateFormatTransformer(format));


Serializer ser = new Persister(m);
Example e = ser.read(Example.class, xml);
于 2012-09-19T10:31:09.570 に答える