【发布时间】:2011-02-26 00:56:31
【问题描述】:
我刚刚在 GregorianCalendar 类中遇到了一个奇怪的行为,我想知道我是否真的在做坏事。
仅当初始化日期的月份的实际最大值大于我要将日历设置为的月份时才会附加。
这里是示例代码:
// 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 天的月份(可能),这与设置为 2 月(28 天)的月份混淆了。修复很简单(只需在设置 year 和 month 之前将 day_of_month 设置为 1 ),但我想知道这真的是想要的行为。有什么想法吗?
【问题讨论】: