Разбор даты с помощью SimpleFramework

Я получаю ответ 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аннотации?

Какой формат должен охватывать эту строку даты?

1 ответ

Решение

SimpleXML поддерживает только некоторые DateFormat"S:

  • гггг-мм-дд чч: мм: сс.с з
  • гггг-мм-дд чч: мм: сс г
  • гггг-мм-дд з
  • YYYY-MM-дд

(Значение каждого символа см. В документе 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);
Другие вопросы по тегам