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));
    }

} 