С чем связана разница результатов в IDEA и на Stepik-е
На вход подается количество секунд с начала дня. На выходе нужно отобразить эти секунды в часах. В IDEA и на сайте выдаются разные результаты. С чем связана эта разница?
Ответы (1 шт):
Ну, использование календаря для этой задачи - не самая лучшая идея. Не будем на это отвлекаться, т.к. задача, видимо, просто в демонстрации работы класса.
А дело тут вот в чем.
Устанавливая в календарь миллисекунды, мы устанавливаем абсолютное время от начала Unix-эпохи.
А в методе getTime() календарь отдает нам java.util.Date. А этот класс использует локаль для определения TimeZone, т.е. получаем мы время с учетом нашего часового пояса. То бишь - сколько было времени в нашем городе, когда от начала Unix-эпохи прошло заданное кол-во миллисекунд.
Что касается решения этой задачи, то оно возможно, хотя - повторюсь - это не есть хороший подход. Для этого нужно при получении даты из календаря учесть нашу временнУю зону.
Для иллюстрации сказанного запустите код и посмотрите на вывод.
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Calendar calendar = Calendar.getInstance();
long offset = calendar.getTimeZone().getOffset(calendar.getTimeInMillis());
calendar.setTimeInMillis(3602 * 1000);
System.out.println(calendar.getTimeInMillis());
System.out.println(calendar.getTime());
System.out.println(sdf.format(calendar.getTimeInMillis()));
System.out.println(sdf.format(calendar.getTimeInMillis() - offset));
}
}
P.S. Спасибо за вопрос! Интересная и неочевидная вещь.

