-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
11.0.2
-
x86_64
-
windows_7
A DESCRIPTION OF THE PROBLEM :
GregorianCalendar created by using GregorianCalendar.setTime(Date) does not equal a GregorianCalendar created using GregorianCalendar.from(ZonedDateTime) for the same UTC instant in time. According to toString(), they differ according to these fields: firstDayOfWeek, minimalDaysInFirstWeek, and WEEK_OF_MONTH.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the provided code in Java 11.0.2 (may also affect Java 12, have not tested)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
true
ACTUAL -
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
false
---------- BEGIN SOURCE ----------
long epochMillis = 1355274000000L;
Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone(ZoneOffset.UTC));
c1.setTime(new Date(epochMillis));
System.out.println(c1);
Calendar c2 = GregorianCalendar.from(ZonedDateTime.ofInstant(
Instant.ofEpochMilli(epochMillis),ZoneOffset.UTC));
System.out.println(c2);
System.out.println(c1.equals(c2));
---------- END SOURCE ----------
FREQUENCY : always
GregorianCalendar created by using GregorianCalendar.setTime(Date) does not equal a GregorianCalendar created using GregorianCalendar.from(ZonedDateTime) for the same UTC instant in time. According to toString(), they differ according to these fields: firstDayOfWeek, minimalDaysInFirstWeek, and WEEK_OF_MONTH.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the provided code in Java 11.0.2 (may also affect Java 12, have not tested)
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
true
ACTUAL -
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
java.util.GregorianCalendar[time=1355274000000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=347,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=1,HOUR_OF_DAY=1,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]
false
---------- BEGIN SOURCE ----------
long epochMillis = 1355274000000L;
Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone(ZoneOffset.UTC));
c1.setTime(new Date(epochMillis));
System.out.println(c1);
Calendar c2 = GregorianCalendar.from(ZonedDateTime.ofInstant(
Instant.ofEpochMilli(epochMillis),ZoneOffset.UTC));
System.out.println(c2);
System.out.println(c1.equals(c2));
---------- END SOURCE ----------
FREQUENCY : always