Календарь Android показывает неправильное время

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

Calendar calendar = Calendar.getInstance();
SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm");

milis = c.getInt(2);
calendar.setTimeInMillis(milis);
vreme = timeformat.format(calendar.getTime());
listavreme.add(vreme);

Milis извлекается как правильный номер из Cursor (проверено), но когда я отображаю getTime() в формате ЧЧ: мм, он всегда отображается с дополнительным часом. Таким образом, если значение milis равно: 61200000 (17:00), календарь отображает его как 18:00. Я не могу понять это.


person user1880779    schedule 01.02.2013    source источник


Ответы (2)


Я думаю, вам нужно установить часовой пояс для вашего местоположения, попробуйте

timeformat.setTimeZone(TimeZone.getTimeZone("GMT"));

Например

person Boe-Dev    schedule 01.02.2013

Calendar.getInstance() будет привязан к часовому поясу. Если вы не укажете его специально, он будет использовать значение по умолчанию для JRE. Я думаю, у вас GMT+1. Итак, поскольку вы (правильно) сохраняете необработанные миллисекунды без часового пояса, вы теряете этот час. Пытаться:

    TimeZone utc = TimeZone.getTimeZone("UTC");
    Calendar calendar = Calendar.getInstance(utc);
person David Lavender    schedule 01.02.2013
comment
Так что было бы лучше просто сохранить его уже привязанным к часовому поясу? - person user1880779; 01.02.2013
comment
Неееет! :) Вы делаете это правильно. Всегда сохраняйте дату и время без часового пояса. Часовой пояс должен быть просто украшением пользовательского интерфейса — не более того. Все сохраненное должно быть в чистом формате UTC. - person David Lavender; 01.02.2013
comment
Итак, я просто устанавливаю часовой пояс, когда имею дело с пользователем? Знаете, что странно? Мой часовой пояс gmt+1, так что это, конечно, телефоны, но когда я ставлю calendar.setTimeZone(TimeZone.getTimeZone(GMT+1));` происходит то же самое (время отображается с дополнительным часом), это работает только с GMT, почему? Я думал, что мне нужно установить его на мой часовой пояс? - person user1880779; 01.02.2013
comment
Хм, это сработало только тогда, когда я установил часовой пояс в своем формате, а не в календаре. - person user1880779; 01.02.2013