2010-01-19 84 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

相关问题