在编写一个计算季度开始时间和结束时间的代码时,发现有些季度的结束年月不正确,比实际大了一天。
代码如下:
/**
* 得到某一时间所在季度的开始时间
*
* @param cal
* 要判断的时间
* @return
*/
private Calendar getStartCalOfQuarter(Calendar cal) {
int jd = this.getQuarter(cal); // 季度
int startMonth = jd * 3 - 3;// 季度的开始月
int year = cal.get(Calendar.YEAR);
Calendar startCal = Calendar.getInstance();// 季度开始时间
startCal.set(year, startMonth, 1, 0, 0,0);
return startCal;
}
/**
* 得到某一时间所在季度的结束时间
*
* @param cal
* 要判断的时间
* @return
*/
private Calendar getEndCalOfQuarter(Calendar cal) {
Calendar endCal = Calendar.getInstance();// 季度结束时间
Calendar startCal = this.getStartCalOfQuarter(cal);// 得到季度开始日期
System.out.println("开始日期:" + startCal.get(Calendar.YEAR) + "年" + startCal.get(Calendar.MONTH) + "月" + startCal.get(Calendar.DAY_OF_MONTH) + "日"
+ startCal.get(Calendar.HOUR_OF_DAY) + "时" + startCal.get(Calendar.SECOND) + "秒");
{// 结束日期
endCal = startCal;
endCal.add(Calendar.MONTH, 2);
int dayOfEndMonth = endCal.getMaximum
(Calendar.DAY_OF_MONTH);
System.out.println("dateOfEndMonth:"+dayOfEndMonth);
endCal.set(Calendar.DATE, dayOfEndMonth);// 设置季度结束日期的 日子
endCal.set(Calendar.HOUR_OF_DAY, 23); // 设置结束日期的小时
endCal.set(Calendar.SECOND, 59);// 设置结束日期的秒
}
System.out.println("结束日期:" + endCal.get(Calendar.YEAR) + "年" + endCal.get(Calendar.MONTH) + "月" + endCal.get(Calendar.DAY_OF_MONTH) + "日"
+ endCal.get(Calendar.HOUR_OF_DAY) + "时" + endCal.get(Calendar.SECOND) + "秒");
return endCal;
}
后来发现用endCal.getMaximum(Calendar.DAY_OF_MONTH)得到的都是31。
查资料,用getActualMaximum(int)方法才能得到实际最大值。Java API让人看得茫然……(英文不好)
getMinimum 与getActualMinimum方法也是这样。