Java: это правильный способ получить текущее время как объект календаря в определенном часовом поясе? - PullRequest
3 голосов
/ 11 ноября 2009

Я знаю, что есть другие подобные вопросы, но я придумал свой собственный способ узнать текущее время в определенном часовом поясе, поэтому я просто хотел подтвердить, правильно это или нет, или есть ошибки, которые я не позаботился о.

Calendar cal = Calendar.getInstance();

// Assuming we want to get the current time in GMT.
TimeZone tz = TimeZone.getTimeZone("GMT");
cal.setTimeInMillis(calendar.getTimeInMillis()
                    + tz.getOffset(calendar.getTimeInMillis())
                    - TimeZone.getDefault().getOffset(calendar.getTimeInMillis()));

// Calendar should now be in GMT.

Вышеприведенное верно вообще? Я провел свой собственный тест, и он, похоже, работал, как и ожидалось, но просто хотел подтвердить его еще раз экспертами в Stack Overflow.

Ответы [ 2 ]

7 голосов
/ 11 ноября 2009

Если вы просто выполните Calendar.getInstance с аргументом TimeZone, внутреннее состояние календаря для методов get() вернет вам поле со временем для этого часового пояса. Например:

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    // if i run this at 9 EST this will print 2
    System.out.println(cal.get(Calendar.HOUR)); 

Если вам просто нужно местное время для отображения, вы можете установить TimeZone для вашего объекта формата. Например:

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(new Date()));

Однако, как сказал Макарс, время Джоды пришло, если вам нужно сделать что-то более сложное. API дат Java - это кошмар.

1 голос
/ 11 ноября 2009

Я бы предпочел использовать joda-time вместо этого.

Проверьте эту ссылку .

...