Меня действительно смущает результат, который я получаю с Calendar.getInstance(TimeZone.getTimeZone("UTC"))
вызовом метода, он возвращает время IST.
Вот код, который я использовал
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
и я получил ответ:
Sat Jan 25 15:44:18 IST 2014
Поэтому я попытался изменить часовой пояс по умолчанию на UTC, а затем проверил, и он работает нормально
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
TimeZone tz = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);
Результат:
Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014
Я что-то упустил?
java.util.Date
не зависит от часового пояса. Когда вы печатаете,cal_Two
хотя дляCalendar
экземпляра установлен часовой поясUTC
,cal_Two.getTime()
будет возвращенDate
экземпляр, у которого нет часового пояса (и всегда находится в часовом поясе по умолчанию)Вывод:
Из javadoc
TimeZone.setDefault()
Следовательно, переместив ваш
setDefault()
before,cal_Two
вы получите правильный результат.Вывод:
источник
работает на меня
источник
Вам определенно не хватает одной мелочи, а именно: вы не устанавливаете значение по умолчанию:
Итак, код будет выглядеть так:
Объяснение : Если вы хотите изменить часовой пояс, установите часовой пояс по умолчанию, используя
TimeZone.setDefault()
источник
источник
Попробуйте использовать
GMT
вместоUTC
. Они относятся к одному часовому поясу, но это имяGMT
более распространено и может работать.источник