У меня есть метка времени, минуты, даты и миллисекунды, и я пытаюсь создать объект Date, представляющий время. Временная метка указана в восточном дневном свете.
При анализе проблемы я создал простой тестовый код, чтобы увидеть, что происходит, и заметил следующее:
Date today = new Date();
int hour = 4, min = 0, sec = 0, ms = 64;
boolean print = true;
Calendar cal = GregorianCalendar.getInstance();
if(print)
System.out.println("After initializing, time is: "+cal.getTime());
cal.clear();
if(print)
System.out.println("After clearing, time is: "+cal.getTime());
cal.setTime(today);
if(print)
System.out.println("After setting date, time is: "+cal.getTime());
cal.set(Calendar.HOUR_OF_DAY,hour);
if(print)
System.out.println("After setting hour, time is: "+cal.getTime());
cal.set(Calendar.MINUTE,min);
if(print)
System.out.println("After setting minute, time is: "+cal.getTime());
cal.set(Calendar.SECOND,sec);
if(print)
System.out.println("After setting second, time is: "+cal.getTime());
cal.set(Calendar.MILLISECOND,ms);
if(print)
System.out.println("After setting milliseconds, time is: "+cal.getTime());
cal.setTimeZone(TimeZone.getTimeZone("EDT"));
System.out.println("After setting time zone, time is: "+cal.getTime());
Это приводит к выходу:
After initializing, time is: Tue Jan 07 16:01:59 EST 2014
After clearing, time is: Thu Jan 01 00:00:00 EST 1970
After setting date, time is: Tue Jan 07 16:01:59 EST 2014
After setting hour, time is: Tue Jan 07 04:01:59 EST 2014
After setting minute, time is: Tue Jan 07 04:00:59 EST 2014
After setting second, time is: Tue Jan 07 04:00:00 EST 2014
After setting milliseconds, time is: Tue Jan 07 04:00:00 EST 2014
After setting time zone, time is: Tue Jan 07 04:00:00 EST 2014
Однако, если я немного изменил код:
boolean print = false;
Я получаю следующий (другой) результат (!)
After setting time zone, time is: Mon Jan 06 23:00:00 EST 2014
Кто-нибудь знает, почему это происходит?