Java补全日期及计算日期长度

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {

	/**年*/
	public static final int YEAR_RETURN = 0;
	/**月*/
	public static final int MONTH_RETURN = 1;
	/**日*/
	public static final int DAY_RETURN = 2;
	/**时*/
	public static final int HOUR_RETURN= 3;
	/**分*/
	public static final int MINUTE_RETURN = 4;
	/**秒*/
	public static final int SECOND_RETURN = 5;
	/**周*/
	public static final int WEEK_RETURN = 6;
	/**季度*/
	public static final int QUARTER_RETURN = 7;

	/**年*/
	public static final String YYYY = "yyyy";
	/**年-月*/
	public static final String YYYYMM = "yyyy-MM";
	/**年-月-日*/
	public static final String YYYYMMDD = "yyyy-MM-dd";
	/**年-月-日-时*/
	public static final String YYYYMMDDHH= "yyyy-MM-dd HH";
	/**年-月-日-时-分*/
	public static final String YYYYMMDDHHMM = "yyyy-MM-dd HH:mm";
	/**年-月-日-时-分-秒*/
	public static final String YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";





	/**
	 * 获取某个时间指定间隔前后的日期(间隔单位年月日周等),以结束日期倒推补全
	 * @param startDate 开始日期YYYYMMDD
	 * @param endDate 结束日期YYYYMMDD
	 * @param type 间隔类型
	 * 以结束日期向前推间隔 日期
	 * @return 日期数组YYYYMMDD
	 */
	public static String[] calendarData(String startDate,String endDate,String type) throws ParseException {
		Integer y = Integer.parseInt(endDate.substring(0, endDate.length()-6));
		Integer m = Integer.parseInt(endDate.substring(5, endDate.length()-3));
		Integer d = Integer.parseInt(endDate.substring(8, endDate.length()));

		Calendar calendar = Calendar.getInstance();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		String[] interval=null;
		if(type.equals("ByYear")){
			//获取时间间隔了多少年
			Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.YEAR_RETURN)));
			interval=new String[between];
			for (Integer i = 1; i <= between; i++) {
				calendar.set(y,m-1,d);
				calendar.add(Calendar.YEAR, -i);
				interval[i-1]=simpleDateFormat.format(calendar.getTime());
			}
		}
		if(type.equals("ByMonth")){
			//获取时间间隔了多少月
			Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.MONTH_RETURN)));
			interval=new String[between];
			for (Integer i = 1; i <= between; i++) {
				calendar.set(y,m-1,d);
				calendar.add(Calendar.MONTH, -i);
				interval[i-1]=simpleDateFormat.format(calendar.getTime());
			}
		}
		if(type.equals("ByDay")){
			//获取时间间隔了多少日
			Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.DAY_RETURN)));
			interval=new String[between];
			for (Integer i = 1; i <= between; i++) {
				calendar.set(y,m-1,d);
				calendar.add(Calendar.DATE, -i);
				interval[i-1]=simpleDateFormat.format(calendar.getTime());
			}
		}
		if(type.equals("ByWeek")){
			//获取时间间隔了多少周
			Integer between = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, DateUtils.WEEK_RETURN)));
			interval=new String[between];
			for (Integer i = 1; i <= between; i++) {
				calendar.set(y,m-1,d);
				calendar.add(Calendar.WEEK_OF_YEAR, -i);
				interval[i-1]=simpleDateFormat.format(calendar.getTime());
			}
		}
		if(type.equals("ByQuarter")){
			//获取时间间隔了多少个季度
			Integer betweens = Integer.parseInt(String.valueOf(DateUtils.getBetween(startDate, endDate, DateUtils.YYYYMMDD, (DateUtils.MONTH_RETURN))));
			Integer between=betweens/4;
			interval=new String[between];
			for (Integer i = 1; i <= between; i++) {
				calendar.set(y,m-1,d);
				calendar.add(Calendar.MONTH, -i*3);
				interval[i-1]=simpleDateFormat.format(calendar.getTime());
			}
		}
		return interval;
	}
	public static void main(String[] args) throws ParseException {
		String[] dateArr = calendarData("2000-01-02", "2020-01-02", "ByDay");
		int length = dateArr.length;
		for (String s : dateArr) {
			System.out.println(s);
		}
	}

	//计算两个日期相隔的长度(年、月、季度、天、小时、分、秒、周)
	public static long getBetween(String beginTime, String endTime, String formatPattern, int returnPattern) throws ParseException{
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatPattern);
		Date beginDate = simpleDateFormat.parse(beginTime);
		Date endDate = simpleDateFormat.parse(endTime);

		Calendar beginCalendar = Calendar.getInstance();
		Calendar endCalendar = Calendar.getInstance();
		beginCalendar.setTime(beginDate);
		endCalendar.setTime(endDate);

		switch (returnPattern) {
			case YEAR_RETURN:
				return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR);
			case MONTH_RETURN:
				return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + DateUtils.getByField(beginCalendar, endCalendar, Calendar.MONTH);
			case QUARTER_RETURN:
				return DateUtils.getByField(beginCalendar, endCalendar, Calendar.YEAR)*12 + DateUtils.getByField(beginCalendar, endCalendar, Calendar.MONTH);
			case DAY_RETURN:
				return DateUtils.getTime(beginDate, endDate)/(24*60*60*1000);
			case HOUR_RETURN:
				return DateUtils.getTime(beginDate, endDate)/(60*60*1000);
			case MINUTE_RETURN:
				return DateUtils.getTime(beginDate, endDate)/(60*1000);
			case SECOND_RETURN:
				return DateUtils.getTime(beginDate, endDate)/1000;
			case WEEK_RETURN:
				return DateUtils.getTime(beginDate, endDate)/(7*24*60*60*1000);
			default:
				return 0;
		}
	}

	private static long getByField(Calendar beginCalendar, Calendar endCalendar, int calendarField){
		return endCalendar.get(calendarField) - beginCalendar.get(calendarField);
	}

	private static long getTime(Date beginDate, Date endDate){
		return endDate.getTime() - beginDate.getTime();
	}



//	public static void main(String[] args) {
//		try {
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.YEAR_RETURN ));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.MONTH_RETURN));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.DAY_RETURN ));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.HOUR_RETURN));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.MINUTE_RETURN));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.SECOND_RETURN));
//			System.out.println(DateUtils.getBetween("2013-05-02", "2020-12-18", DateUtils.YYYYMMDD, DateUtils.WEEK_RETURN));
//		} catch (ParseException e) {
//			e.printStackTrace();
//		}
//	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

儿时可乖了

混口饭吃,大佬们,赏点吧

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

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

打赏作者

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

抵扣说明:

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

余额充值