FULL PRODUCT VERSION : java version "1.4.2_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_07-b05) Java HotSpot(TM) Client VM (build 1.4.2_07-b05, mixed mode) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] A DESCRIPTION OF THE PROBLEM : import java.util.*; public class Test { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, -1000); System.out.println(c.toString()); System.out.println(c.get(Calendar.YEAR)); System.out.println(c.getTime()); System.out.println(c.toString()); } } output: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.uti l.calendar.ZoneInfo[id="Asia/Taipei",offset=28800000,dstSavings=0,useDaylight=false,transitions=42,l astRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=-1000,MONTH=5,WEEK_OF_YEAR=23,WEE K_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=152,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=6,HOUR _OF_DAY=18,MINUTE=41,SECOND=51,MILLISECOND=637,ZONE_OFFSET=28800000,DST_OFFSET=0] 1001 Fri Jun 01 18:41:51 CST 1001 java.util.GregorianCalendar[time=-93711820688363,areFieldsSet=true,areAllFieldsSet=true,lenient=true ,zone=sun.util.calendar.ZoneInfo[id="Asia/Taipei",offset=28800000,dstSavings=0,useDaylight=false,tra nsitions=42,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=0,YEAR=1001,MONTH=5,WEEK_OF _YEAR=22,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=153,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1 ,HOUR=6,HOUR_OF_DAY=18,MINUTE=41,SECOND=51,MILLISECOND=637,ZONE_OFFSET=28800000,DST_OFFSET=0] System.out.println(c.toString()); ==> YEAR=-1000 System.out.println(c.get(Calendar.YEAR)); ==>1001 System.out.println(c.getTime()); ==>Fri Jun 01 18:37:25 CST 1001 System.out.println(c.toString()); ==> YEAR=1001 the c.toString() prints the right year, -1000, but c.get(Calendar.YEAR) and c.getTime() is wrong, the year become 1001, print again the calendar, the year wrong again. it must a bug in java.util.Calendar. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : just compile and run the source code. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - System.out.println(c.toString()); ==> YEAR=-1000 System.out.println(c.get(Calendar.YEAR)); ==>-1000 System.out.println(c.getTime()); ==>Fri Jun 01 18:37:25 CST -1000 System.out.println(c.toString()); ==> YEAR=-1000 ACTUAL - System.out.println(c.toString()); ==> YEAR=-1000 System.out.println(c.get(Calendar.YEAR)); ==>1001 System.out.println(c.getTime()); ==>Fri Jun 01 18:37:25 CST 1001 System.out.println(c.toString()); ==> YEAR=1001 REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import java.util.*; public class Test { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, -1000); System.out.println(c.toString()); System.out.println(c.get(Calendar.YEAR)); System.out.println(c.getTime()); System.out.println(c.toString()); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : NO WAY TO WORKAROUND ###@###.### 2005-06-01 12:16:43 GMT
|