Joda DateTime ISODateTimeFormat шаблон

Документы Joda ISODateTimeFormat говорят, что ISODateTimeFormat.dateTime() возвращает форматер для шаблона yyyy-MM-dd'T'HH: mm: ss.SSSZZ

Но средство форматирования возвращает "Z" вместо +00: 00
см. this-

DateTime dt = DateTime.now(DateTimeZone.UTC);

DateTimeFormatter patternFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ");
DateTimeFormatter isoFormat = ISODateTimeFormat.dateTime();

System.out.println(dt.toString(patternFormat));     //2014-06-01T03:02:13.552+00:00
System.out.println(dt.toString(isoFormat));         //2014-06-01T03:02:13.552Z

Может ли кто-нибудь сказать мне, какой будет шаблон, чтобы заставить +00: 00 печатать как Z

Редактировать: Просто к clarify- я знаю, что "Z" - это то же самое, что и +00: 00, но в текстовом смысле это другое. То, что я спрашиваю, - это то, какой шаблон поместил бы Z в качестве временного смещения вместо +00: 00

(Извините, если это слишком тривиально. Я хотел использовать формат ISO без миллисекунд, и в процессе написания этого вопроса я нашел именно то, что мне было нужно в ISODateTimeFormat.dateTimeNoMillis(), поэтому я спрашиваю сейчас только ради интересов)

Ответы

Ответ 1

Похоже, вы не можете создать такой форматер исключительно из шаблона. Документ DateTimeFormat гласит:

Zone:

  • 'Z' выводит смещение без двоеточия,
  • "ZZ" выводит смещение с помощью двоеточия,
  • "ZZZ" или более выводит идентификатор зоны.

Вы можете создать большую часть форматера из шаблона, а затем настроить вывод часового пояса следующим образом:

    DateTimeFormatter patternFormat = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
        .appendTimeZoneOffset("Z", true, 2, 4)
        .toFormatter();

Ответ 2

But the formatter returns a "Z" in place of +00:00 see this-

Смотри, док, ясно сказано,

The time zone offset is 'Z' for zero, and of the form '±HH:mm' for non-zero.

Таким образом, это значение ISO 2014-06-01T03: 02: 13.552Z эквивалентно 2014-06-01T03: 02: 13.552 + 00: 00.

В вашем коде, чтобы увидеть ненулевой регистр, попробуйте с

DateTime dt = DateTime.now(); //without arg DateTimeZone.UTC;

Ответ 3

Если вы знаете, что ваш TimeZone всегда будет DateTimeZone.UTC, тогда вы можете ввести Z в шаблон так же, как и T-символ. Что-то вроде этого:

DateTimeFormatter patternFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

Если вы хотите иметь тот же формат, но без миллисекунд, шаблон может выглядеть примерно так:

DateTimeFormatter patternFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");

Я уверен, что вы нашли эту страницу, но см. справочную страницу по форматированию времени, чтобы узнать подробности об этих форматах и ​​других параметрах.

Ответ 4

'Z' - это короткий термин для Zulu time, который совпадает с GMT или UTC

Я думаю, что это то, что вам нужно.!!

int offset = DateTimeZone.forID("UTC").getOffset(new DateTime());