-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
8, 11, 17, 18, 19
-
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);
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);