2016-01-11 2 views
3

Я пытаюсь вывести текущий DateTime в формате UTC в следующем формате: 2016-01-11T14: 08: 42 + 00: 00SimpleDateFormat игнорирует "XXX", если временная зона установлена ​​в "UTC"

final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 

final String dateString = formatter.format(new Date()); 

«dateString» теперь должен содержать «2016-01-11T14: 08: 42 + 00: 00», но содержит «2016-01-11T14: 08: 42Z».

Без установки «UTC» часовой пояс я получаю правильный формат, но - конечно - в моем конкретном часовом поясе ...

Любые идеи?

ответ

6

Смотрите документацию для SimpleDateFormat:

для форматирования [с использованием ISO 8601 часового пояса], если значение смещения от GMT равно 0, "Z" производится.

Таким образом, ожидается такое поведение.

Вы можете:

  • Используйте RFC 822 часовой пояс форматировщик ZZZ; Однако, это приводит к «+0000»
  • Манипулировать строку, чтобы заменить окончательный Z: str.replaceAll("Z$", "+00:00")
+0

Я думаю, что мой путь просто «неправильно» путь. Я попытаюсь использовать «Z», поскольку он/кажется стандартным. СПАСИБО! – eventhorizon

+0

@eventhorizon Я не думаю, что ваш путь обязательно неправильный; Я считаю неожиданным поведение использовать 'Z' вместо' +00: 00'. Я уверен, что за решением было хорошее намерение, я просто не знаю, что это могло быть. Однако придерживаться 'Z' может быть проще. –

+0

@eventhorizon Z является символом UTC + 00: 00, официально обозначенным в стандарте ISO-8601. Вероятно, буква Z первоначально исходит из использования США и США (Z = Zulu). –

Смежные вопросы