获取开始及结束日期间隔月份或年份列表

/**
	 * 获取开始及结束日期间隔月份列表
	 * start格式 "2015-01-01"
	 * end格式 "2016-01-01"
	 * @param start
	 * @param end
	 * @return
	 */
	public static List<String> getMonths(String start, String end) {
		List<String> dateList = new ArrayList<String>();
	    if (StringUtils.isNotBlank(start) && StringUtils.isNotBlank(end)) {
	    	Date dBegin = ToolDateTime.parse(start, ToolDateTime.pattern_ymd);
	    	Date dEnd = ToolDateTime.parse(end, ToolDateTime.pattern_ymd);
	    	
	    	Calendar calBegin = Calendar.getInstance();
	    	// 使用给定的 Date 设置此 Calendar 的时间  
	    	calBegin.setTime(dBegin);
	    	int yearMonth1 = (calBegin.get(Calendar.YEAR)) * 100 + calBegin.get(Calendar.MONTH);
	    	Calendar calEnd = Calendar.getInstance();
	    	// 使用给定的 Date 设置此 Calendar 的时间  
	    	calEnd.setTime(dEnd);
	    	int yearMonth2 = (calEnd.get(Calendar.YEAR)) * 100 + calEnd.get(Calendar.MONTH);
	    	// 测试此日期是否在指定日期之后  
	    	while (yearMonth2 >= yearMonth1) {
	    		dateList.add(ToolDateTime.format(calBegin.getTime(), ToolDateTime.pattern_ym));
	    		calBegin.add(Calendar.MONTH, 1); 
	    		yearMonth1 = (calBegin.get(Calendar.YEAR)) * 100 + calBegin.get(Calendar.MONTH);
	    	}
	    }
	    return dateList;
    }
	
	/**
	 * 获取开始及结束日期间隔年份列表
	 * start格式 "2015-01-01"
	 * end格式 "2016-01-01"
	 * @param start
	 * @param end
	 * @return
	 */
	public static List<String> getYears(String start, String end) {
		List<String> dateList = new ArrayList<String>();
		if (StringUtils.isNotBlank(start) && StringUtils.isNotBlank(end)) {
			Date dBegin = ToolDateTime.parse(start, ToolDateTime.pattern_ymd);
			Date dEnd = ToolDateTime.parse(end, ToolDateTime.pattern_ymd);
			
			Calendar calBegin = Calendar.getInstance();
			// 使用给定的 Date 设置此 Calendar 的时间  
			calBegin.setTime(dBegin);
			int year1 = calBegin.get(Calendar.YEAR);
			Calendar calEnd = Calendar.getInstance();
			// 使用给定的 Date 设置此 Calendar 的时间  
			calEnd.setTime(dEnd);
			int year2 = calEnd.get(Calendar.YEAR);
			// 测试此日期是否在指定日期之后  
			while (year2 >= year1) {
				dateList.add(ToolDateTime.format(calBegin.getTime(), "yyyy"));
				calBegin.add(Calendar.YEAR, 1); 
				year1 = calBegin.get(Calendar.YEAR);
			}
		}
		return dateList;
	}


注:

工具类ToolDateTime.class没粘,把下面的改成自己的方法即可

public static final String pattern_ym = "yyyy-MM"; // pattern_ym
public static final String pattern_ymd = "yyyy-MM-dd"; // pattern_ymd


public static String format(Date date, String pattern) {
DateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}

public static Date parse(String date, String pattern) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
return format.parse(date);
} catch (ParseException e) {
log.error("ToolDateTime.parse异常:date值" + date + ",pattern值" + pattern);
return null;
}
}

获取上个月份的开始和结束时间的年月日可以使用Java中的Calendar类和SimpleDateFormat类。 以下是一个示例代码: ```java import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class LastMonthStartEnd { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 获取当前时间 calendar.add(Calendar.MONTH, -1); // 获取上个月份 int year = calendar.get(Calendar.YEAR); // 获取年份 int month = calendar.get(Calendar.MONTH) + 1; // 获取月份(注意要加1) int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); // 获取当月天数 // 获取上个月份的开始时间的年月日 calendar.set(Calendar.DAY_OF_MONTH, 1); int startYear = calendar.get(Calendar.YEAR); int startMonth = calendar.get(Calendar.MONTH) + 1; int startDay = calendar.get(Calendar.DAY_OF_MONTH); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("上个月份的开始时间:" + sdf.format(calendar.getTime())); // 获取上个月份结束时间的年月日 calendar.set(Calendar.DAY_OF_MONTH, days); int endYear = calendar.get(Calendar.YEAR); int endMonth = calendar.get(Calendar.MONTH) + 1; int endDay = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("上个月份结束时间:" + sdf.format(calendar.getTime())); } } ``` 运行结果如下: ``` 上个月份的开始时间:2021-12-01 上个月份结束时间:2021-12-31 ``` 其中,`calendar.add(Calendar.MONTH, -1)` 方法可以获取上个月份。其他的获取年月日的方法和获取当前月份的开始结束时间的方法一样。最后,使用 `SimpleDateFormat` 类将日期转换为指定格式的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值