@blackCover

Как работает класс Calendar в этом коде?

Здравствуйте.
Подскажите как работает класс Calendar в этом коде
public static Calendar getDate() {
Calendar date = Calendar.getInstance();
date.setTimeInMillis(timestamp * 1000);
return date;
}

timstamp - время, получаемое с open weather map. Запросом получаю данные погоды на 5 дней и записываю в List. Судя из ответа с сервера, получаю список элементов на 5 дней с интервалом в 3 часа. Данные погоде питаюсь вывести на экран в цикле с условием
if (weatherDay.getDate().get(Calendar.HOUR_OF_DAY) == 15),в ответе timstamp = 1615215600 при времени 15:00,но я получаю сдвиг на 2 часа вперед, а номер месяца на 1 назад, и в это условие естественно не попадаю. Как быть в этой ситуации?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день!
В прошлом вопросе вы же сказали, что решили вопрос.

Как решить проблему с «Unable to create converter for class»?
На виртуальном устройстве в настройках был установлен часовой пояс GTM-0, а у меня +2. Это и решило проблему.


А я еще тогда обратил ваше внимание на то, что время у вас и так указано в миллисекундах.
public static Calendar getDate() {
Calendar date = Calendar.getInstance();
date.setTimeInMillis(timestamp * 1000);
return date;
}

А сеттер setTimeInMillis принимает время в миллисекундах. Так зачем вы умножаете timestamp на 1000?
Не нужно умножать на 1000. Иначе вы в качестве текущего года получаете 53152 вместо 2021

Вот, для наглядности:
public static void main(String[] args) {
    long timestamp = System.currentTimeMillis();
    Calendar calendar = Calendar.getInstance();
// Ваш код:
    calendar.setTimeInMillis(timestamp * 1000);
    System.out.println(calendar.getTime());
// Мой код:
    calendar.setTimeInMillis(timestamp);
    System.out.println(calendar.getTime());
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы