java获取两个日期之间的所有日期,获取两个月份之间的所有月份

package com.sitech.bds.dg.dq.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

public class DateUtil {
	/**
	 * 获取两个日期之间的所有日期
	 * @param startTime 开始日期
	 * @param endTime 结束日期
	 * @return
	 */
	public static List<String> getDayBetween(String startTime, String endTime) {

	    // 返回的日期集合
	    List<String> days = new ArrayList<String>();

	    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	    try {
	        Date start = dateFormat.parse(startTime);
	        Date end = dateFormat.parse(endTime);

	        Calendar tempStart = Calendar.getInstance();
	        tempStart.setTime(start);

	        Calendar tempEnd = Calendar.getInstance();
	        tempEnd.setTime(end);
	        tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
	        while (tempStart.before(tempEnd)) {
	            days.add(dateFormat.format(tempStart.getTime()));
	            tempStart.add(Calendar.DAY_OF_YEAR, 1);
	        }

	    } catch (ParseException e) {
	        e.printStackTrace();
	    }

	    return days;
	}
	
	/**
	   * 	获取两个月份之间的所有月份(含跨年)
	   * @param minDate
	   * @param maxDate
	   * @return
	   * @throws ParseException
	   */
	  public static List<String> getMonthBetween(String minDate, String maxDate) {
		ArrayList<String> result = new ArrayList<String>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");// 格式化为年月
		try {
			Calendar min = Calendar.getInstance();
			Calendar max = Calendar.getInstance();

			min.setTime(sdf.parse(minDate));
			min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

			max.setTime(sdf.parse(maxDate));
			max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

			Calendar curr = min;
			while (curr.before(max)) {
				result.add(sdf.format(curr.getTime()));
				curr.add(Calendar.MONTH, 1);
			}

			// 实现排序方法
			Collections.sort(result, new Comparator<Object>() {
				@Override
				public int compare(Object o1, Object o2) {
					String str1 = (String) o1;
					String str2 = (String) o2;
					SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
					Date date1 = null;
					Date date2 = null;
					try {
						date1 = format.parse(str1);
						date2 = format.parse(str2);
					} catch (ParseException e) {
						e.printStackTrace();
					}

					if (date2.compareTo(date1) > 0) {
						return -1;
					}
					return 1;
				}
			});
		}catch (ParseException e) {
	        e.printStackTrace();
	    }
		
		return result;
	}
	
	public static void main(String[] args) {
		/*List<String> days = getDayBetween("2021-04-26", "2021-05-02");
		for (String day : days) {
			System.out.println(day);
		}*/
		
		List<String> monthBetween = getMonthBetween("2020-03", "2021-04");
		for (String month : monthBetween) {
			System.out.println(month);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来@音律

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值