Java DateTimeFormatter добавление Z, когда часовой пояс +0000 - PullRequest
0 голосов
/ 17 апреля 2020

Допустим, у меня есть две даты: ´

  • 20191105235900
  • 20190802235900

Я использую dateTimeFormatter с SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.getDefault());

В конце я получаю это:

  • 2019-11-05T23: 59: 00Z - неверно, правильным будет 2019-11-05T23: 59: 00 + 00: 00
  • 2019-08-02T23: 59: 00 + 01: 00 - правильно

Также я не могу просто заменить Z на +00: 00, так как это будет еще один шаг обработки.

Полный код:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.getDefault());
this.timestampString = sdf.format(date);    

1 Ответ

1 голос
/ 17 апреля 2020

Когда вы посмотрите на страницу Википедии для ISO 8601 , вы обнаружите, что это ожидаемое поведение:

Всемирное координированное время (UT C)

Если время указано в UT C, добавьте Z сразу после времени без пробела. Z обозначает зону для нулевого смещения UT C. Поэтому «09:30 UT C» представляется как «09: 30Z» или «0930Z». «14:45:15 UT C» будет «14: 45: 15Z» или «144515Z».

Суффикс Z в представлении времени ISO 8601 иногда называют «временем Зулуса», поскольку эта же буква используется для обозначения часового пояса Зулу. Однако стандарт ACP 121, определяющий список военных часовых поясов, не упоминает UT C и выводит «время зулусов» из среднего времени по Гринвичу [28], которое ранее использовалось в качестве международного стандарта гражданского времени. GMT больше не определяется точно научным сообществом c и может ссылаться на UT C или UT1 в зависимости от контекста. [29]

Любой клиент должен иметь возможность проанализировать это.

...