views:

149

answers:

1

Hello,

I have following XML generated by serializing a boost::posix_time::ptime structure. I want to create a Java Date object with this XML.

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

Below is the Java code that is supposed to construct Date object by de-serializing this XML. Problem that I am facing is how to break the <date> tag into year/month/day sequence.

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();

Any hints?

EDIT:

I am looking for some elegant solution that doesn't require converting date to a string and then splitting it. That would be my last resort.

Thanks

A: 

As you don't want to use a String (though I urge you to reconsider, after all that's what it is and easier to parse too), I guess you can do regular old division to extract parts. i.e.

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

That's not very elegant either.

The best way to handle this would be to instruct whatever you're using to deserialize to give you back a String for date instead of an Integer. Then you can just take the first four characters for your, next two for month and last two for day. SimpleDateFormat can do the heavy lifting here.

wds
I went on with the subString() approach after all as it is easier to read than the modulus division method.
6pack kid