2010-01-19 82 views
0

我通過序列化boost :: posix_time :: ptime結構生成以下XML。我想用這個XML創建一個Java Date對象。使用boost :: posix_time :: ptime序列化XML表示創建Java對象

<timeStamp class_id="0" tracking_level="0" version="0"> 
    <ptime_date class_id="1" tracking_level="0" version="0"> 
     <date>20100119</date> 
    </ptime_date> 
    <ptime_time_duration class_id="2" tracking_level="0" version="0"> 
     <time_duration_hours>11</time_duration_hours> 
     <time_duration_minutes>53</time_duration_minutes> 
     <time_duration_seconds>33</time_duration_seconds> 
     <time_duration_fractional_seconds>0</time_duration_fractional_seconds> 
    </ptime_time_duration> 
</timeStamp> 

下面是應該通過反序列化這個XML來構造Date對象的Java代碼。我面臨的問題是如何將<日期>標記分爲年/月/日序列。

Integer date = timeStamp.getPtimeDate().getDate(); 
Integer hrs = timeStamp.getPtimeTimeDuration().getTimeDurationHours(); 
Integer mins = timeStamp.getPtimeTimeDuration().getTimeDurationMinutes(); 
Integer secs = timeStamp.getPtimeTimeDuration().getTimeDurationSeconds(); 

Calendar cal = Calendar.getInstance(); 
//TODO 
//cal.set(year, month, day, hrs, mins, secs); 
Date date = cal.getTime(); 

任何提示?

編輯:

我找的,不需要轉換日期字符串,然後分裂它的一些優雅的解決方案。那將是我最後的手段。

感謝

回答

1

當你不想使用String(雖然我勸你重新考慮,畢竟這是它是什麼,更容易分析過),我想你可以經常做舊師提取部分。即

int tmp = date; // unboxing 
int year = tmp/10000; 
int month = (tmp % 10000)/100; 
int day = tmp % 100; 

這也不是很優雅。

處理此問題的最佳方法是指示您正在使用的任何反序列化操作,以便爲date返回String而不是Integer。然後,您可以爲您的前四個字符,下兩個月份和最後兩個日期。 SimpleDateFormat可以在這裏做繁重的工作。

+0

我繼續使用subString()方法,因爲它比模數除法更容易閱讀。 – 2010-01-20 08:23:34

相關問題