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

java.util.Calendar getTimeInMillis() throws a java.lang.IllegalArgumentException

XMLWordPrintable

    • generic
    • generic

      A DESCRIPTION OF THE PROBLEM :
      Under certain circumstances, the getTimeInMillis() function throws a java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1

      The following parameters have an influence on the behavior:
      1: TimeZone
      2: YEAR
      3: MONTH
      4: DAY_OF_MONTH
      5: HOUR_OF_DAY

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create a Junit Test:

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      2022-02-23 09:45:27,145 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 1 HOUR: 0
      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 2 HOUR: 0
      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,211 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 3 HOUR: 0
      2022-02-23 09:45:27,227 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,227 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,227 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 4 HOUR: 0
      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 5 HOUR: 0
      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,229 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 6 HOUR: 0
      2022-02-23 09:45:27,261 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,261 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:45:27,261 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 7 HOUR: 0
      2022-02-23 09:45:27,261 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:45:27,261 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      ACTUAL -
      2022-02-23 09:44:18,773 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 1 HOUR: 0
      2022-02-23 09:44:18,811 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - OK: 627
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - NOT OK: 1 [Europe/Athens]

      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 2 HOUR: 0
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 3 HOUR: 0
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 4 HOUR: 0
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:44:18,842 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 5 HOUR: 0
      2022-02-23 09:44:18,858 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:44:18,858 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []

      2022-02-23 09:44:18,858 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 6 HOUR: 0
      2022-02-23 09:44:18,889 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,889 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,889 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - OK: 621
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - NOT OK: 7 [America/Martinique, Asia/Famagusta, Asia/Nicosia, Atlantic/Canary, Europe/Budapest, Europe/Nicosia, Europe/Vienna]

      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - YEAR: 1980 MONTH: 3 DAY: 7 HOUR: 0
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - OK: 628
      2022-02-23 09:44:18,896 INFO [zo.abr.base.CalendarTest] - NOT OK: 0 []


      ---------- BEGIN SOURCE ----------
      import java.util.ArrayList;
      import java.util.Calendar;
      import java.util.List;
      import java.util.TimeZone;

      import org.apache.commons.logging.Log;
      import org.apache.commons.logging.LogFactory;
      import org.junit.Test;

      public class CalendarTest {

          private static final Log logger = LogFactory.getLog(CalendarTest.class);

          @Test
          public void testGetTimeInMillis() {

              for (int i = 1; i <= 7; i++) {
                  testGetTimeInMillis(1980, Calendar.APRIL, i, 0);
              }

          }

          public void testGetTimeInMillis(int year, int month, int dayOfMonth, int hourOfDay) {
              logger.info(String.format("YEAR: %s MONTH: %s DAY: %s HOUR: %s", year, month, dayOfMonth, hourOfDay));

              List<String> okTimeZone = new ArrayList<String>();
              List<String> nokTimeZone = new ArrayList<String>();

              for (String timeZone : TimeZone.getAvailableIDs()) {

                  Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(timeZone));
                  cal.setLenient(false);
                  cal.set(Calendar.YEAR, year);
                  cal.set(Calendar.MONTH, month);
                  cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                  cal.set(Calendar.HOUR_OF_DAY, hourOfDay);

                  try {
                      cal.getTimeInMillis();
                      okTimeZone.add(timeZone);
                  } catch (IllegalArgumentException illegalArgumentException) {
                      nokTimeZone.add(timeZone);
                      logger.info(illegalArgumentException);
                  }
              }

              logger.info(String.format(" OK: %s", okTimeZone.size()));
              logger.info(String.format("NOT OK: %s %s\n", nokTimeZone.size(), nokTimeZone));
          }

      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      cal.setLenient(TRUE);

            naoto Naoto Sato
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: