我剛剛遇到了一個GregorianCalendar類的奇怪行爲,而且我在想我是否真的做得不好。GregorianCalendar的奇怪行爲
只有當初始化日期的月份的actualMaximum大於我要設置日曆的月份時,纔會附加此選項。
下面是示例代碼:
// today is 2010/05/31
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.MONTH, 1); // FEBRUARY
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
return cal.getTime(); // => 2010/03/03, wtf
我知道這個問題的事實,日曆初始化日期是31天月(5月),這與設置爲二月月份混亂造成的(28天)。修復很簡單(只需在設置年月之前將day_of_month設置爲1),但我想知道這是否真的是想要的行爲。有什麼想法嗎 ?
這是有效的。謝謝!! – 2015-04-01 09:39:58