2013-01-23 163 views
1

我試圖讓XStream能夠將包含日期時間的字符串(例如2013-01-23 16:50:39.495855)轉換爲java.lang.Long實例。使用XStream將字符串日期時間轉換爲Java Long

目前,我有XML像這樣:

<widget> 
    <timestamp val="2013-01-23 16:50:39.495855"/> 
</widget> 

我想(自1970年1月1日米利斯的數量),這樣,轉換成標準的Unix紀元時間戳。由於上述日期時間轉換爲Unix紀元時間戳(如果我的數學是正確的),我希望XStream將其轉換爲new Long(1358959839000)實例。

我不相信這是可能使用XStream的別名方法,我可能需要寫我自己的Converter,然而com.thoughtworks.xstream.converters.basic.LongConverter已經存在,所以我不知道怎麼寫我自己的UnixEpochLongConverter看到這兩個轉換器正在嘗試將字符串轉換爲長整型。有任何想法嗎?提前致謝!

+0

爲什麼在XStream中進行此轉換(即Date - > Long)? – mre

+0

我有一個Java POJO(我無法更改),它有一個'Long timestamp'字段。我需要XStream將XML轉換爲此POJO的實例,因此我需要使用XStream完成轉換。 – IAmYourFaja

+1

難道你不能使用一箇中間對象,然後轉換爲你所說的POJO? – mre

回答

1

或者使用registerLocalConverter或以上XStream.PRIORITY_NORMAL優先註冊您的自定義轉換爲本地。

xstream.registerLocalConverter(
    Widget.class, 
    "timestamp", 
    new UnixEpochLongConverter()); 
+0

我的天啊!有人讀我的問題!謝謝!!! – IAmYourFaja

-1

您可以使用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); 
+0

謝謝@Zenil,但是這隻能告訴我如何將字符串轉換爲長字符,這不是我的問題。我需要配置XStream來解析上面提供的'date'字符串。你能否提供一個更完整的代碼示例,在XStream轉換器中顯示此代碼片段,或者其他一些覆蓋XStream「LongConverter」的對象? – IAmYourFaja

+0

看到你的POJO評論。如果你確實考慮一個非xstream解決方案,你可以編寫一個靜態實用工具方法,它會把你的POJO,從你的POJO日期字符串計算出來,並返回它 – Zenil

+0

嘿,我發現這個鏈接,它提供了一個很好的介紹來編寫你自己的轉換器http ://xstream.codehaus.org/converter-tutorial.html。給它一個鏡頭。如果你遇到問題,我可以嘗試寫一個。 – Zenil

相關問題