【发布时间】:2015-10-06 05:52:45
【问题描述】:
我已经开始将一个项目从使用 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);
}
}
显然,日期时间被保存在 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>
显然,它什么也没保存,但不,它只是保存“实际”日期时间。我的意思是,如果我将项目保存在 XML 文件中,例如 15:30,然后我在 18:00 加载 XML 文件,那么日期显示... 18:00!!
当然,这不是我所期望的行为。我希望在 XML 文件中保存毫秒数,所以每当我反序列化对象时,我每次都会得到相同的 DateTime。
我做错了什么?
我也尝试了以下方法,得到了相同的结果:
item.setDateTime(DateTime.now());
item.setDateTime(Instant.now().toDateTime());
提前谢谢你。
【问题讨论】:
标签: java xml datetime serialization jodatime