Календарь getTimeInMillis() зависит от часового пояса?

Java: часовой пояс, почему разные часовые пояса дают одинаковое значение в миллисекундах

ссылаясь на приведенную выше ссылку, я предположил, что getTimeInMillis() класса Calendar возвращает количество миллисекунд независимо от часового пояса.

Но используя следующий код:

 Calendar cal = Calendar.getInstance();
 int dateInSeconds = (int)(cal.getTimeInMillis()/1000);
 Log.i("TIME IN SECONDS: ",""+dateInSeconds);

сначала попытался установить системные часы на 10:00 и GMT+02:00

производя определенное выходное число. Но установка системных часов на 10:00 и GMT+00:00

выходное число примерно на 7200 больше, чем в предыдущем случае, что соответствует примерно 2 часам.

Зачем?

2 ответа

Решение

Для получения количества миллисекунд, независимых от часового пояса, я нашел следующее решение

Вместо:

 int dateInSeconds = (int)(cal.getTimeInMillis()/1000);

Я использую:

 int dateInSeconds = (int)((cal.getTimeInMillis()+cal.getTimeZone().getOffset(cal.getTimeInMillis()))/1000);

это работает хорошо для меня.

Вы ошибаетесь. getTimeInMillis() даст вам время, независимое от часового пояса. Если вы измените часовой пояс на часах компьютера, но при этом сохраните отображаемое время, вы фактически измените время независимо от часового пояса. Поэтому вы не должны использовать предоставленный вами код, и никто другой не должен его читать.

Другие вопросы по тегам