Calendar类getActualMaximum方法与getMaximum方法

在编写一个计算季度开始时间和结束时间的代码时,发现有些季度的结束年月不正确,比实际大了一天。

代码如下:

/**
	 * 得到某一时间所在季度的开始时间
	 * 
	 * @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方法也是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值