出于好奇,为什么我收到IllegalArgumentException了MONTH在下面的测试案例?
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我查看了GregorianCalendar,它是我系统的默认值,并且意识到该MONTH字段实际上是第一个在2月30日与3月2日相比有所不同的字段,但这不IllegalArgumentException应该是导致溢出的原因,还是仅仅被认为难以"发现"?
因为二月总是不到30天.并且您将Calendar实例上的日期设置 为30.因此,当您尝试创建无效时Date,Java将不会让您,因为这将是无效日期并且您已选择setLienient(false).
请尝试以下方法:
c.set(Calendar.DAY_OF_MONTH, 28);
c.set(Calendar.MONTH, Calendar.FEBRUARY);
c.set(Calendar.YEAR, 2010);
Run Code Online (Sandbox Code Playgroud)
这应该工作.
这最终是因为你打电话造成的c.setLenient(false);.这会导致Java对其允许的日期严格控制.
有关方法,请参阅Javadoc:
public void setLenient(boolean lenient)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |