Java Date奇怪

时间:2010-11-30 20:04:38

标签: java datetime

出于好奇,我为什么会在以下测试用例中收到IllegalArgumentException的{​​{1}}?

MONTH

我查看了GregorianCalendar,它是我系统的默认值,并且意识到public class Testing { public static void main(String args[]) { Calendar c = Calendar.getInstance(Locale.getDefault()); c.setLenient(false); Date d = new Date(); c.set(Calendar.MONTH, Calendar.FEBRUARY); c.set(Calendar.DAY_OF_MONTH, 30); c.set(Calendar.YEAR, 2010); d = c.getTime(); //Exception is not thrown until this line System.out.println(d.toString()); } } 字段实际上是第一个在2月30日与3月2日相比有所不同的字段,但是不应该这个MONTH是导致溢出的原因,还是仅仅被认为难以“发现”?

1 个答案:

答案 0 :(得分:8)

因为二月总是少于30天。并且您将Calendar实例上的日期设置为30.因此,当您尝试创建无效的Date时,Java将不会让您,因为这将是无效日期并且您已选择{{ 1}}。

尝试以下方法:

setLienient(false)

这应该有效。

这最终是因为您正在呼叫c.set(Calendar.DAY_OF_MONTH, 28); c.set(Calendar.MONTH, Calendar.FEBRUARY); c.set(Calendar.YEAR, 2010); 而导致的。这导致Java对它允许的日期严格。

请参阅Javadoc获取方法:

public void setLenient(boolean lenient)