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".
"2013-09-29T18:46:19Z".
Я прочитал, что здесь Z представляет GMT/UTC часовой пояс. но когда я печатаю эту дату на консоли, она выводит IST timezne для возвращаемой даты.
GMT/UTC
Теперь мой вопрос в том, правильный ли мой вывод или неправильный?
Переведено автоматически
Ответ 1
Вы не установили часовой пояс, только добавили Z в конец даты / времени, поэтому это будет выглядеть как дата / время GMT, но это не меняет значения.
Z
Установите часовой пояс на GMT, и он будет правильным.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Ответ 2
'T' и 'Z' рассматриваются здесь как константы. Вам нужно передавать Z без кавычек. Кроме того, вам нужно указать часовой пояс во входной строке.
'T'
'Z'
Пример : 2013-09-29T18:46:19-0700 И формат как "yyyy-MM-dd'T'HH:mm:ssZ"
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
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') используйте следующий код
Date
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
' '
yyyy-MM-dd'T'HH:mm:ssZ
2015-01-22T03:41:02+0000
Ответ 4
ЕСЛИ вы хотите обрабатывать "стандартное" представление даты в формате JSON, то лучше использовать этот шаблон: "yyyy-MM-dd'T'HH:mm:ssX".
"yyyy-MM-dd'T'HH:mm:ssX"
Обратите внимание на X в конце. Он будет обрабатывать часовые пояса в стандарте ISO 8601, а ISO 8601 - это именно то, что создает этот оператор в Javascript new Date().toJSON()
X
new Date().toJSON()
По сравнению с другими ответами у него есть некоторые преимущества:
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));