我已开始将项目从使用 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/