java - 使用 SimpleFramework 解析日期

标签 java date simple-framework

我收到一个 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 的注释中定义日期格式?

什么格式应该包含这个日期字符串?

最佳答案

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);

关于java - 使用 SimpleFramework 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277887/

相关文章:

date - 如何在Hive中将十六进制日期值转换为日期值

javascript - 使用 setDate 添加天数后,月份没有变化

java - 使用枚举的策略模式。需要一个简单的Java示例

java - 如何在运行时 chromedriver selenium 中更改 useragent-string

mysql - 如何在 MySQL 中获取两个日期中较新的一个?

java - 简单的 Xml 框架松散映射不起作用

java - SimpleXml 框架 - 嵌入式集合

java - Simple-XML - 如何序列化集合中的派生类?

java - 错误java代码eclipse SQL错误: 972, SQLState: 42000 ORA-00972: 标识符太长

java - Selenium 网络驱动程序 : how to use xpath filter?