使用XStream将字符串datetime转换为Java Long

使用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

我试图让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历元时间戳(如果我的数学正确)
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,我发现这个链接提供了一个很好的介绍你自己的转换器的方法。如果你面临问题,我可以试着写一个。