我正在尝试让XStream能够将包含日期时间(例如2013-01-23 16:50:39.495855
)的字符串转换为java.lang.Long
实例。
目前,我有这样的XML:
<widget>
<timestamp val="2013-01-23 16:50:39.495855"/>
</widget>
我想将其转换为标准的 Unix 纪元时间戳(自 1970 年 1 月 1 日以来的 millis 数)。由于上述日期时间转换为 Unix 纪元时间戳(如果我的数学是正确的)1358959839000
,我希望 XStream 将其转换为new Long(1358959839000)
实例。
我不相信使用 XStream 的别名方法可以做到这一点,我可能需要编写我自己的Converter
,但是com.thoughtworks.xstream.converters.basic.LongConverter
已经存在,所以我不确定如何编写我自己的UnixEpochLongConverter
看到两个转换器都试图将字符串转换为长字符串。有什么想法吗?提前感谢!
使用 registerLocalConverter 将您的自定义转换器注册为本地转换器,或者优先级高于 XStream.PRIORITY_NORMAL
.
xstream.registerLocalConverter(
Widget.class,
"timestamp",
new UnixEpochLongConverter());
您可以使用 DateFormat 对象将字符串转换为 java.util.Date 对象,然后执行 date.getTime() 以返回一个长值。下面是一个示例。您可以在对象中编写一个方法,该方法基本上将字符串转换为 long。
String date = "2013-01-23 16:50:39.495855";
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
Date datem = format.parse(date);
long longDate = datem.getTime();
System.out.println(longDate);