当 lenient 为 false 时,Calendar.getTime() 上出现 IllegalArgumentException

Mat*_*as 1 java calendar

在下面的代码中,我得到一个 IllegalArgumentException 但我不明白为什么:

    Calendar date = Calendar.getInstance();
    date.clear();
    date.setLenient(false);
    date.set(2017, 2, 26, 2, 23);
    date.getTime();//here is the Exception thrown
Run Code Online (Sandbox Code Playgroud)

异常堆栈:

Exception in thread "main" java.lang.IllegalArgumentException: HOUR_OF_DAY: 2 -> 3
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2829)
at java.util.Calendar.updateTime(Calendar.java:3393)
at java.util.Calendar.getTimeInMillis(Calendar.java:1782)
at java.util.Calendar.getTime(Calendar.java:1755)
at WildDog.main(WildDog.java:13)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

第一次响应后的更多详细信息:时区是 CEST Java 是 1.8.0_102(问题也在 IBM 1.6_x 上)

Jig*_*shi 5

给定的时区根本不存在时间。大多数欧洲国家在此期间经历夏令时转变。按照 @JonSkeet 建议找出您的时区并验证它。您的时间可能是 CET --> CEST