2013-09-16 2 views
2
TimeZone utcTimezone_ = TimeZone.getTimeZone("UTC"); 
TimeZone _utc = TimeZone.getTimeZone("Zulu"); 
DateFormat _fo = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
_fo.setTimeZone(_utc); 
GregorianCalendar gc = new GregorianCalendar(_utc); 

System.out.println(gc.getTime()); 
System.out.println(gc.get(GregorianCalendar.MINUTE)); 
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY)); 

Пример из выходного сигнала при запуске выше код:GregorianCalendar неожиданные значения

Mon Sep 16 16:40:37 CST 2013 
10 
7 

В этом случае я ожидал минут, чтобы быть 40 (а не 10) и час, чтобы быть 16 (не 7). Что я не понимаю об этом сейчас? Спасибо.

EDIT: Если изменить часовой пояс на ДКБ, который мой местный часовой пояс минута и час еще не совпадают:

TimeZone _utc = TimeZone.getTimeZone("CST"); 
DateFormat _fo = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
_fo.setTimeZone(_utc); 
GregorianCalendar gc = new GregorianCalendar(_utc); 

System.out.println(gc.getTime()); 
System.out.println(gc.get(GregorianCalendar.MINUTE)); 
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY)); 

Выход:

Mon Sep 16 21:23:48 CST 2013 
53 
6 
+0

У устройства есть правильное время и час? – Reinherd

+0

Я получаю 'Mon Sep 16 17:18:51 EST 2013' из' gc.getTime', '18' из' MINUTE' и '7' из' HOUR_OF_DAY'. Если я использую '_fo.format (gc.getTime())' I get '2013-09-16 07: 18' ... который, кажется, соответствует ... возможно,« Календарь »игнорирует часовой пояс. – MadProgrammer

+0

Обратитесь к этому: http://stackoverflow.com/a/308689/624622 – AsG

ответ

2
System.out.println(gc.getTime()); 

Эта линия печатает календарь в локальном часовом поясе вашего компьютера (getTime() возвращает Date, содержащий количество мс с эпохи, которая не связана с часовым поясом, t при неявном вызове toString() распечатайте его, используя локальный часовой пояс). Это результат CST.

System.out.println(gc.get(GregorianCalendar.MINUTE)); 
System.out.println(gc.get(GregorianCalendar.HOUR_OF_DAY)); 

Эти строки печатают поля календаря в часовом поясе календаря. Это «Зулу» в соответствии с вашим кодом.

By the way, it is strongly recommended not to use three-letters timezones:

Трехбуквенный часовой пояс идентификаторы

Для совместимости с JDK 1.1.x, некоторые другие идентификаторы часового пояса трехбуквенные (такие, как "PST", "СТТ", «AST») - . Однако их использование устарело, поскольку аббревиатура часто используется для нескольких часовых поясов (например, «CST» может быть «Центральное стандартное время» и «Китайское стандартное время»), а платформа Java может тогда только признать один из них.

+0

Но если я изменю часовой пояс на КНТ, выход все равно не соответствует ... – gttommo

+0

Не могли бы вы также предоставить новый код и итоговый результат? – Guillaume

+0

См. Выше edit to post – gttommo

1

System.out.println (gc.getTime()); печатает дату в локальном часовом поясе - CST, пока вы установите часовой пояс календаря на GMT.

Смежные вопросы