java - 序列化和反序列化 Joda DateTime 对象

标签 java xml datetime serialization jodatime

我已开始将项目从使用 Java 标准日期迁移到 Joda DateTime。

我的项目使用 XML 序列化将对象保存到 XML 文件。在这种特殊情况下,我有一个具有 DateTime 属性的 Item 类。

在某个时刻,我正在初始化该对象,包括 DateTime 属性,如下所示:

        Item item = new Item();
        item.setIdSearchCriteria(this.searchCriteria.getId());
        item.setUrl(fullUrl);
        item.setTitle(itemTitle);   
        item.setDateTime(new DateTime());

我使用 XMLEncoder 使用辅助类序列化项目:

public void saveDataList(List<Serializable> dataList) throws DAOGenericException 
{
    if(dataList == null)
        throw new IllegalArgumentException();

    checkDirectory();
    ArrayList<Serializable> writtenObject = (ArrayList<Serializable>) dataList;
    FileOutputStream os;
    try {

        // Save data as xml file
        os = new FileOutputStream(new File(fullFilename));
        XMLEncoder encoder = new XMLEncoder(os);
        encoder.writeObject(writtenObject);
        encoder.close();
    } catch (FileNotFoundException e) 
    {
        throw new DAOGenericException(e.getMessage(),e);
    }
}

显然,DateTime 被保存在 xml 中......但没有值:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
 <object class="java.util.ArrayList">
  <void method="add">
   <object class="com.pikes.domain.Item">
    <void property="dateTime">
     <object class="org.joda.time.DateTime"/>
    </void>
    <void property="id">
     <int>1</int>
    </void>
    <void property="idSearchCriteria">
     <int>1</int>
    </void>
    <void property="title">
     <string>A title</string>
    </void>
    <void property="url">
     <string>http://www.random-url.com</string>
    </void>
   </object>
  </void>
 </object>
</java>

显然,它没有保存任何内容,但不是,它只是保存“实际”日期时间。我的意思是,如果我在 15:30 将项目保存在 XML 文件中,然后在 18:00 加载 XML 文件,那么日期将显示... 18:00!!

当然,这不是我所期望的行为。我希望在 XML 文件中保存毫秒数,因此每当我反序列化对象时,我每次都会得到相同的 DateTime。

我做错了什么?

我也尝试了以下方法,得到了相同的结果:

item.setDateTime(DateTime.now());
item.setDateTime(Instant.now().toDateTime());

提前谢谢您。

最佳答案

您需要创建一个 java.beans.PersistenceDelegate Jodatime 的实现,并将其设置为 java.beans.XMLEncoder 上相应类型的持久委托(delegate)。使用setPersistenceDelegate方法。

关于java - 序列化和反序列化 Joda DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460070/

相关文章:

java - JTable setValueAt StackOverflowError

jquery - 使用 jQuery、SEO 将远程内容加载到 div 元素中

java - XSLT 从两个不同的源读取(XML 文件和 Excel 工作表)

xml - 如何忽略 XML 命名空间

c# - 将 Jalali 月份添加到 Jalali 日期

python - 日期时间 Python - 下一个工作日

java - 如何在 Buffer Writer 中创建新行 - Java

Java tan 函数未按预期工作

mysql - 从 SQL 检索最新日期并获取差异

java - 由于 SSLException 无法连接到 SQLServer