Search code examples
javagroovydatetime-formatutcjava-time

Formatting a date for XML to include a UTC offset


I'm generating an XML which contains a date in a valid XML format, and I need it to include a UTC offset as well.

I'm ussing groovy but I'll show the Java code I'm using instead (an answer in either language is good):

Calendar c = Calendar.getInstance();  
long timeZoneOffset = c.timeZone.getOffset(c.getTimeInMillis())/(1000*60*60);
SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
formatter.format(c.getTime()) + "+0" + timeZoneOffset + ":00";

The above code give4s me 2011-06-12T07:23:25.000+03:00, but this code has two problems:

  1. It is ugly, and probably not the best way to do this
  2. It won't work for timezones like India (GMT +5:30), Nepal (GMT +5:45)

I tried using new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z") for the timezone, but it gave me 2011-06-12T07:23:25.000+0300 which is not a correct format (+0300 instead of +03:00).

Any other way to format the date the way I need it? (preferably without 3rd parties)


Solution

  • One other alternative - also buried inside jaxb api - (not needing Jodatime):

        Calendar c = ...
        String printDate = javax.xml.bind.DatatypeConverter.printDateTime(c);
    

    HTH