Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Handling a strange date format

 
M Bryan
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hey Folks,

i want to talk with a small gadget via SOAP. Getting the communication done was quite a heavy task, but now i have to handle with a strange date format, which looks like this: 2011-09-06T14:30:00.050+02:00
When getting this format in an answer, i remove the T and the third : and parse this format in a date.
The first problem lies when trying to get this format back into the gadgets format: Since date handles timezones, the time is set back to 12:30. I would have to get a String of the date, change the time, add the timezone information add the end...
The second problem is where i really struggle: In an answer i have a timestamp in the given format. Now i want to get an entry after this entry, that means, one millisecond later. How can i add one millisecond in this format?

Thank you for help!
 
Paul Clapham
Sheriff
Posts: 21107
32
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Have you confirmed that whatever you're sending that string to actually cares whether you format your date as "12:30 ... +00:00" instead of "14.30 ... +02:00"? After all both strings represent the same instant of time.
 
M Bryan
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yes, it seems logical. But when debugging i found out:
The first entry i get is at 14:30:00.000+02:00, i managed to change the time to 12:30:01, but the timezone information seems to gets lost or does not get considered, because the next entry i get is the same as before.
So i would like to convert the String i get to date, add one millisecond and then convert it back in the exact same format:
2011-09-06T14:30:00.000+02:00 -> converting to date (12:30 +0000) -> 2011-09-06T14:30:00.001+02:00
 
Paul Clapham
Sheriff
Posts: 21107
32
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
So does that mean that your target software cares, or not?

Or does it mean you haven't got so far as to test that because you are floundering in a swamp of confusion?

I suspect it's the latter because I'm confused by what you posted there. Could you post an actual example? With the code that produces the results which are confusing you?
 
M Bryan
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You're right, i'm kinda confused and i am not sure if the timezone information is used. But i want to show what i want:



This code changes the given date to 2011-09-06T14:30:00.000+0:00.
As you can the, the timezone information is gone. How can i format the string to date and back to string and get the exact same string?
 
Paul Clapham
Sheriff
Posts: 21107
32
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't know. Since I very much suspect you don't really need the exact same string, just a similar string which represents the same timestamp, that's why I asked whether you really needed the exact same string.

So I suggest you find out whether you really have a problem before you spend a lot of time trying to solve something which isn't a problem.
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Posts: 15284
39
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

That looks like the ISO 8601 date format, which is the standard format for dates in XML files.

Unfortunately, SimpleDateFormat has limitations so that it cannot handle this format very well. In fact, the date and time APIs in standard Java are not very good at all. A very popular library to work with dates and times, and which does handle ISO 8601 format properly, is Joda Time.

Fortunately, standard Java does have some classes and methods to handle XML date representations, such as class XMLGregorianCalendar:

Lookup class XMLGregorianCalendar in the API documentation.

Another point:

Note that class java.util.Date does not know anything about timezones. Class Date just represents an "absolute" moment in time. When you want the content of a Date to be printed with respect to a particular timezone, you have to set the timezone on the DateFormat object that you're using to format it:

 
M Bryan
Ranch Hand
Posts: 64
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thank you for this hint. But how do i add one millisecond to a XMLGregorianCalendar object?
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Posts: 15284
39
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think like this (not tested):

See the API documentation of the classes XMLGregorianCalendar, Duration and DatatypeFactory. They are in the package javax.xml.datatype.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic