Я пытаюсь разобраться с обработкой времени -и наткнулся на кое-что в Java, что меня несколько сбило с толку. Возьмем этот пример кода:
public static void main(String[] args)
{
//Calendar set to 12:00 AM of the current day (Eastern Daylight Time)
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-4"));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
/////
//Calendar set to 12:00 AM of the current day (UTC time)
Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
utcCal.set(Calendar.HOUR_OF_DAY, 0);
utcCal.set(Calendar.MINUTE, 0);
utcCal.set(Calendar.SECOND, 0);
utcCal.set(Calendar.MILLISECOND, 0);
/////
long oneHourMilliseconds = 3600000;
System.out.println((cal.getTimeInMillis() - utcCal.getTimeInMillis()) / oneHourMilliseconds);
}
Я визуализирую алгоритм расчета времени, представленный cal
принимающий 1 из 2 форм:
Epoch - 4 * oneHourMilliseconds
).Оба этих алгоритма должны давать результат, который на 4 часа отстает от utcCal
, однако запуск кода возвращает 4
.
Может ли кто-нибудь объяснить мне, почему cal
, несмотря на то, что он установлен в часовой пояс на 4 часа отстает от utcCal
, в конечном итоге имеет значение миллисекунды на 4 часа позже, чем utcCal ? Разве код не должен возвращать -4
?