Разбор даты с помощью 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);