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());