Календарь не возвращается по Гринвичу - PullRequest
2 голосов
/ 25 октября 2011

Я пытаюсь установить для объекта календаря значение GMT, но getTime () всегда возвращает время в GMT + 1 (мое текущее время).Я попытался:

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("skeniver"));

Все они, очевидно, возвращают GMT, потому что

cal.getTimeZone().getDisplayName()

возвращает "GMT + 00: 00";но

cal.getTime().toString();

всегда отображает время в GMT + 1.

Кто-нибудь знает, почему это происходит?

Ответы [ 3 ]

1 голос
/ 25 октября 2011

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

Date dateTimeNow = new Date();
TimeZone tz = TimeZone.getDefault();
int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(dateTimeNow) ? tz.getDSTSavings() : 0);
Date dateTimeNowUTC = new Date(dateTimeNow.getTime() - currentOffsetFromUTC);
0 голосов
/ 25 октября 2011

Calendar.getTime() возвращает объект Date.В Java Date является просто держателем длинной метки времени, начинающейся в эпоху UNIX.

Чтобы отобразить Date в другом TimeZone, чем по умолчанию, вы можете использовать SimpleDateFormat.

0 голосов
/ 25 октября 2011

Если вы хотите в строке, то предпочтите DateFormat или SimpleDateFormat для этого

, вот пример

SimpleDateFormat sdf = new SimpleDateFormat(); // here you can also define your format of date for e.g. "dd/MM/yyyy z"

sdf.setTimeZone("GMT");

Calendar cal = Calendar.getInstance();
System.out.println(sdf.format(cal.getTime()));
...