Форматирование даты для XML, чтобы включить смещение UTC - PullRequest
3 голосов
/ 12 июня 2011

Я генерирую XML, который содержит дату в допустимом формате XML, и мне нужно, чтобы он также включал смещение UTC.

Я использую groovy, но япокажу код Java, который я использую вместо этого (ответ на любом языке хороший):

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

Приведенный выше код дает мне 2011-06-12T07:23:25.000+03:00, но у этого кода есть две проблемы:

  1. Это уродливо и, вероятно, не самый лучший способ сделать это
  2. Это не сработает для часовых поясов, таких как Индия ( GMT +5: 30 ), Непал ( GMT +5: 45 )

Я пытался использовать new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z") для часового пояса, но это дало мне 2011-06-12T07:23:25.000+0300 который не является правильным форматом (+0300 вместо +03:00).

Любой другой способ отформатировать дату так, как мне это нужно?(желательно без третьих лиц)

Ответы [ 4 ]

2 голосов
/ 12 июня 2011

Еще одна альтернатива - также скрыта внутри jaxb api - (не требующий Jodatime):

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

HTH

1 голос
/ 12 июня 2011

Я думаю, что самый элегантный способ - использовать библиотеку Joda-Time . Вам необходим формат ISO 8601 (раздел 5.4) (представленный xs:dateTime тип XSD):

 DateTime dt = new DateTime();
 DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
 System.out.println(fmt.print(dt));

Результат:

2011-06-12T07: 36: 32,294 + 02: 00

0 голосов
/ 07 мая 2015

SimpleDataFormat http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html поддерживает букву спецификатора формата X, которая включает двоеточие ":" в часовом поясе.Стоит прочесть раздел о часовых поясах и, в частности, часть о «ThreeLetterISO8601TimeZone»

Использование строки формата «гггг.ММ.dd ЧЧ: мм: сс.сссХХХ» дало мне 2015.05.07 15:0658,058 + 10: 00

0 голосов
/ 12 июня 2011

Вы пробовали использовать XMLGregorianCalendar? Например:

Calendar c = ...
DataTypeFactory f = DataTypeFactory.newInstance();
XMLGregorianCalendar xc = f.newXMLGregorianCalendar(c);
String str = xc.toXMLFormat();

Если календарь представляет собой дату-время со смещением часового пояса, то смещение часового пояса должно быть включено в строку результата, отформатированную в соответствии со спецификацией типов данных XML.

...