Вопрос-ответ

Java SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") gives timezone as IST

Java SimpleDateFormat("yyyy-MM-dd'T'HH: mm: ss'Z'") задает часовой пояс как IST

У меня есть конструктор SimpleDateFormat как

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")

и я разбираю строку "2013-09-29T18:46:19Z".

Я прочитал, что здесь Z представляет GMT/UTC часовой пояс. но когда я печатаю эту дату на консоли, она выводит IST timezne для возвращаемой даты.

Теперь мой вопрос в том, правильный ли мой вывод или неправильный?

Переведено автоматически
Ответ 1

Вы не установили часовой пояс, только добавили Z в конец даты / времени, поэтому это будет выглядеть как дата / время GMT, но это не меняет значения.

Установите часовой пояс на GMT, и он будет правильным.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Ответ 2

'T' и 'Z' рассматриваются здесь как константы. Вам нужно передавать Z без кавычек. Кроме того, вам нужно указать часовой пояс во входной строке.

Пример : 2013-09-29T18:46:19-0700 И формат как "yyyy-MM-dd'T'HH:mm:ssZ"

Ответ 3

Из строки ISO 8601 в объект Java Date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
sdf.parse("2013-09-29T18:46:19Z"); //prints-> Mon Sep 30 02:46:19 CST 2013

если вы не установите TimeZone.getTimeZone("GMT"), то он выведет Sun Sep 29 18:46:19 CST 2013

Из объекта Java Date в строку ISO 8601

И для преобразования Dateобъекта в стандарт ISO 8601 (yyyy-MM-dd'T'HH:mm:ss'Z') используйте следующий код

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(new Date())); //-prints-> 2015-01-22T03:23:26Z

Также обратите внимание, что без ' ' в Z yyyy-MM-dd'T'HH:mm:ssZ печатается 2015-01-22T03:41:02+0000

Ответ 4

ЕСЛИ вы хотите обрабатывать "стандартное" представление даты в формате JSON, то лучше использовать этот шаблон: "yyyy-MM-dd'T'HH:mm:ssX".

Обратите внимание на X в конце. Он будет обрабатывать часовые пояса в стандарте ISO 8601, а ISO 8601 - это именно то, что создает этот оператор в Javascript new Date().toJSON()

По сравнению с другими ответами у него есть некоторые преимущества:


  1. Вам не нужно требовать от ваших клиентов отправлять дату в GMT

  2. Вам не нужно явно преобразовывать ваш объект Date в GMT, используя это: sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

java date