Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8222796

Two GregorianCalendar instances created for same UTC time not equal

XMLWordPrintable

      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


            psonal Pallavi Sonal (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: