Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Calendar.getTime()中存在奇怪的IllegalArgumentException_Java_Calendar - Fatal编程技术网

Java Calendar.getTime()中存在奇怪的IllegalArgumentException

Java Calendar.getTime()中存在奇怪的IllegalArgumentException,java,calendar,Java,Calendar,这个非常简单的测试失败了,IllegalArgumentException(“第2天的小时->第3天”),我看不出原因。您可以将任何小时、天、月、年更改为任何其他值,测试成功。我测试的任何JRE都失败。似乎是GregorgianCalendar实现中的内部问题?还是我遗漏了一些明显的东西 import java.util.Calendar; public class DateTest extends TestCase { /** test if 2011/03/27 02:30:00

这个非常简单的测试失败了,
IllegalArgumentException(“第2天的小时->第3天”)
,我看不出原因。您可以将任何小时、天、月、年更改为任何其他值,测试成功。我测试的任何JRE都失败。似乎是GregorgianCalendar实现中的内部问题?还是我遗漏了一些明显的东西

import java.util.Calendar;

public class DateTest extends TestCase
{
    /** test if 2011/03/27 02:30:00 converts to a valid date.
     * shouldn't throw any exception, however this throws 
     * IllegalArgumentException("HOUR_OF_DAY 2 -> 3)
     */
    @Test
    public void testDate()
    {
        Calendar cal = Calendar.getInstance();
        cal.setLenient(false);
        cal.clear();
        cal.set(Calendar.SECOND, 00);
        cal.set(Calendar.MINUTE, 30);
        cal.set(Calendar.HOUR_OF_DAY, 02);
        cal.set(Calendar.DAY_OF_MONTH, 27);
        cal.set(Calendar.MONTH, 03 - 1); // needs to be 0-based
        cal.set(Calendar.YEAR, 2011);
        cal.getTime();
    }
}

这个日期和时间组合在您的时区中不存在,因为它属于夏时制造成的不连续性

由于您配置了
setLenient(false)
Calendar
在您尝试输入不存在的日期时正确抛出异常


经验法则:如果你在日期和时间计算中发现一些奇怪的东西,怀疑是夏令时。

注意:当使用
cal.set(2011,03-1,27,02,30,00)时,它同样失败对。现在错误消息“2->3”也有意义了。谢谢