-
Bug
-
Resolution: Won't Fix
-
P4
-
None
-
6u25
-
x86
-
windows_7
FULL PRODUCT VERSION :
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 7 32 bit, windows xp sp3, solaris 5 update 10
A DESCRIPTION OF THE PROBLEM :
Calling setTime() after or before calling setTimeZone() on a calendar object changes the date obtained by getTime() if a set() is called on the calendar.
when setTimeZone() is called after setTime() the returned time after a set to zero seconds is moved by several hours. In the other way the time is correct.
If a get() is called before the set(), we have the expected result.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
compile and run the attach program.
It shows
in 1 the combination setTime() then setTimeZone() then set() which is in error
in 2 the combination setTimeZone() then setTime() then set()
in 3 the combination setTime() then setTimeZone() then get() then set()
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
the expected result should be
1) after setTime then setTimeZone Date = Fri Jan 09 07:00:00 CET 2009
1) after set Date = Fri Jan 09 07:00:00 CET 2009
2) after setTimeZone then setTime Date = Fri Jan 09 07:00:00 CET 2009
2) after set Date = Fri Jan 09 07:00:00 CET 2009
3) after setTime then setTimeZone then get Date = Fri Jan 09 07:00:00 CET 2009
3) after set Date = Fri Jan 09 07:00:00 CET 2009
1 is 14H and should be 07
ACTUAL -
1) after setTime then setTimeZone Date = Fri Jan 09 07:00:00 CET 2009
1) after set Date = Fri Jan 09 14:00:00 CET 2009
2) after setTimeZone then setTime Date = Fri Jan 09 07:00:00 CET 2009
2) after set Date = Fri Jan 09 07:00:00 CET 2009
3) after setTime then setTimeZone then get Date = Fri Jan 09 07:00:00 CET 2009
3) after set Date = Fri Jan 09 07:00:00 CET 2009
all times are the same
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package tst;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class CalendarAdjust
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
Date date = new Date(1231480800000L);
cal.setTime(date);
TimeZone timeZone = TimeZone.getTimeZone("CST");
cal.setTimeZone(timeZone);
System.out.println("1) after setTime then setTimeZone Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("1) after set Date = " + cal.getTime().toString());
cal = Calendar.getInstance();
cal.setTimeZone(timeZone);
cal.setTime(date);
System.out.println("2) after setTimeZone then setTime Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("2) after set Date = " + cal.getTime().toString());
cal = Calendar.getInstance();
cal.setTime(date);
cal.setTimeZone(timeZone);
cal.get(Calendar.DAY_OF_MONTH);
System.out.println("3) after setTime then setTimeZone then get Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("3) after set Date = " + cal.getTime().toString());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
allways call setTimeZone before setTime
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 7 32 bit, windows xp sp3, solaris 5 update 10
A DESCRIPTION OF THE PROBLEM :
Calling setTime() after or before calling setTimeZone() on a calendar object changes the date obtained by getTime() if a set() is called on the calendar.
when setTimeZone() is called after setTime() the returned time after a set to zero seconds is moved by several hours. In the other way the time is correct.
If a get() is called before the set(), we have the expected result.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
compile and run the attach program.
It shows
in 1 the combination setTime() then setTimeZone() then set() which is in error
in 2 the combination setTimeZone() then setTime() then set()
in 3 the combination setTime() then setTimeZone() then get() then set()
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
the expected result should be
1) after setTime then setTimeZone Date = Fri Jan 09 07:00:00 CET 2009
1) after set Date = Fri Jan 09 07:00:00 CET 2009
2) after setTimeZone then setTime Date = Fri Jan 09 07:00:00 CET 2009
2) after set Date = Fri Jan 09 07:00:00 CET 2009
3) after setTime then setTimeZone then get Date = Fri Jan 09 07:00:00 CET 2009
3) after set Date = Fri Jan 09 07:00:00 CET 2009
1 is 14H and should be 07
ACTUAL -
1) after setTime then setTimeZone Date = Fri Jan 09 07:00:00 CET 2009
1) after set Date = Fri Jan 09 14:00:00 CET 2009
2) after setTimeZone then setTime Date = Fri Jan 09 07:00:00 CET 2009
2) after set Date = Fri Jan 09 07:00:00 CET 2009
3) after setTime then setTimeZone then get Date = Fri Jan 09 07:00:00 CET 2009
3) after set Date = Fri Jan 09 07:00:00 CET 2009
all times are the same
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package tst;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class CalendarAdjust
{
public static void main(String[] args)
{
Calendar cal = Calendar.getInstance();
Date date = new Date(1231480800000L);
cal.setTime(date);
TimeZone timeZone = TimeZone.getTimeZone("CST");
cal.setTimeZone(timeZone);
System.out.println("1) after setTime then setTimeZone Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("1) after set Date = " + cal.getTime().toString());
cal = Calendar.getInstance();
cal.setTimeZone(timeZone);
cal.setTime(date);
System.out.println("2) after setTimeZone then setTime Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("2) after set Date = " + cal.getTime().toString());
cal = Calendar.getInstance();
cal.setTime(date);
cal.setTimeZone(timeZone);
cal.get(Calendar.DAY_OF_MONTH);
System.out.println("3) after setTime then setTimeZone then get Date = " + cal.getTime().toString());
cal.set(Calendar.SECOND, 0);
System.out.println("3) after set Date = " + cal.getTime().toString());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
allways call setTimeZone before setTime