Java获取近两年和近六个月(存在bug)

本文提供了一种改进的方法来获取当前日期前的近六个月或近两年的日期列表,解决了跨月和跨年时可能出现的问题,并提供了详细的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	private List<String> getNearDate(String isYear){
		List<String> resultList = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		if("0".equals(isYear)){
			//近六个月
			cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1); //要先+1,才能把本月的算进去
			for(int i=0; i<6; i++){  
	            cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)-1); //逐次往前推1个月  
	            resultList.add(String.valueOf(cal.get(Calendar.YEAR)) + (cal.get(Calendar.MONTH)+1 < 10 ? "0" + (cal.get(Calendar.MONTH)+1) : (cal.get(Calendar.MONTH)+1)));
	        }
		}else {
			//近两年
			int nowYear = cal.get(Calendar.YEAR);
			int lastYear = nowYear - 1 ;
			resultList.add(String.valueOf(nowYear)); 
			resultList.add(String.valueOf(lastYear)); 
		}
		
		return resultList;
	} 



试试大月的31日和1月的最后几天,会出错的。

例如在3月31日执行:

cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1); //要先+1,才能把本月的算进去
时,会使得加1后变成4月31日,进而转化到了五月份。

3月31日执行获取近六个月时,会获取到四月份。

 

笨办法:

/**
	 * 获取近两年或者近六个月日期
	 * @param isYear
	 * @return
	 */
	private List<String> getDate(String isYear){
		List<String> resultList = new ArrayList<String>();
		Calendar cal = Calendar.getInstance();
		if("0".equals(isYear)){
			int MONTH_SIZE = 6 ;		  
		    
		    //获取当前月
			int month = cal.get(Calendar.MONTH)+1;
			int year = cal.get(Calendar.YEAR);
			String aResult = "";
			if(month < 10){
				aResult = year + "0" + month;
			}else{
				aResult = "" + year + month;
			}
			resultList.add(aResult);
			//获取之前五个月
			for(int i = 0; i<MONTH_SIZE - 1; i++){
				month = month - 1;
				if(0 == month){
					month = 12;
					year = year - 1;
				}
				
				if(month < 10){
					aResult = year + "0" + month;
				}else{
					aResult = "" + year + month;
				}
				
				resultList.add(aResult);
			}
		}else {
			//年度取近两年
			int nowYear = cal.get(Calendar.YEAR);
			int lastYear = nowYear - 1 ;
			resultList.add(String.valueOf(nowYear)); 
			resultList.add(String.valueOf(lastYear)); 
		}
		return resultList;
	}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值