使用XStream将字符串datetime转换为Java Long
我试图让XStream能够将包含日期时间的字符串(例如使用XStream将字符串datetime转换为Java Long,java,xml,datetime,xstream,oxm,Java,Xml,Datetime,Xstream,Oxm,我试图让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日以来的毫秒数)。由于上述日期时间转换为Unix历元时间戳(如果我的数学正确)135895
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日以来的毫秒数)。由于上述日期时间转换为Unix历元时间戳(如果我的数学正确)1358959839000
,因此我希望XStream将其转换为新的长(1358959839000)实例
我认为XStream的别名方法不可能做到这一点,我可能需要编写自己的
转换器
,但是com.thoughtworks.XStream.converters.basic.LongConverter已经存在,因此,我不确定如何编写自己的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);
使用或优先级高于XStream.priority\u NORMAL
将自定义转换器注册为本地转换器
xstream.registerLocalConverter(
Widget.class,
"timestamp",
new UnixEpochLongConverter());
为什么要在XStream中进行这种转换(即Date->Long)?我有一个Java POJO(我无法更改),它有一个长时间戳
字段。我需要XStream将XML转换成这个POJO的一个实例,所以我需要用XStream完成转换。难道你不能使用一个中间对象,然后将其转换成你所说的POJO吗?我想我可以,但我想看看是否有XStream大师可以参与基于转换器的解决方案,这会让你感觉更干净。但是好的建议,如果XString真的不具备这种转换能力,我会考虑它。XString当然可以转换。谢谢@ ZeNIL,但是这只告诉我如何将字符串转换成长,这不是我的问题。我需要将XStream配置为在解析上面提供的date
字符串时执行此操作。您能否提供一个更完整的代码示例,显示XStream转换器内的此代码片段,或覆盖XStream的LongConverter
的其他对象?请参阅您的POJO注释。如果你考虑了一个非xString解决方案,你可以编写一个静态的实用方法来获取你的POJO,从POJO数据字符串中计算出长,然后返回IWE,我发现这个链接提供了一个很好的介绍你自己的转换器的方法。如果你面临问题,我可以试着写一个。