时间的计算方法 (根据两个时间段判断是否为年,月)

1.根据两个时间段判断是否为一年 格式(20230206-20240205)

	/* 校验年 格式(20230206-20240205) */
    public Boolean checkYear(Date date1, Date date2){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date1);
        // 把日期往后增加一年
        calendar.add(Calendar.YEAR, 1);
        //把日期往前一天
        calendar.add(Calendar.DATE, -1);
        //如果相同就是一年
        if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
            return true;
        }else{
            return false;
        }
    }

2. 根据两个时间校验是否为一个月 格式(20230206-20230305)

	/* 校验月 格式(20230206-20230305) */
    public Integer checkMonth(Date date1, Date date2){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date1);
        // 把日期往后增加一月
        calendar.add(Calendar.MONTH, 1);
        //把日期往前一天
        calendar.add(Calendar.DATE, -1);
        //如果相同就是一月
        if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
            return 1;
        }else{
            return 0;
        }
    }

3. 根据两个时间计算月份(不足30天按一个月)

 	/** 参数(开始日期,结束日期) **/
    public Integer calculateContractPeriod(Date date1, Date date2){
    	//判断如果开始时间,结束时间有一个为空直接返回0
        if (ToolUtil.isEmpty(date1)||ToolUtil.isEmpty(date2)){
            return 0;
        }
        //计算天数
        long days = ((date2.getTime() - date1.getTime()) / (1000*3600*24))+1;
        //小于30天 算一个月
        if (days<=30){
            return 1;
        }else{
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date2);
            // 把日期往后增加一天,整数往后推,负数往前移动
            calendar.add(Calendar.DATE, 1);
            // 这个时间就是日期往后推一天的结果
            date2 = calendar.getTime();
            
            Calendar c1 = Calendar.getInstance();
            Calendar c2 = Calendar.getInstance();
            c1.setTime(date1);
            c2.setTime(date2);
            //结束时间小于开始时间直接返回0
            if (c2.getTimeInMillis() < c1.getTimeInMillis()) return 0;
            int year1 = c1.get(Calendar.YEAR);
            int year2 = c2.get(Calendar.YEAR);
            int month1 = c1.get(Calendar.MONTH);
            int month2 = c2.get(Calendar.MONTH);
            int day1 = c1.get(Calendar.DAY_OF_MONTH);
            int day2 = c2.get(Calendar.DAY_OF_MONTH);
            int yearInterval = year2 - year1;
            if (month2 < month1 || month1 == month2 && day2 < day1) yearInterval--;
            int monthInterval = (month2 + 12) - month1;
            if (day2 < day1) monthInterval--;
            monthInterval %= 12;
            int moresu = yearInterval * 12 + monthInterval;
            return moresu;
        }
    }

4. 获取当前时间N天后的时间(字符串)

	/** 获取当前时间N天后的时间 **/
	public String getAfterDayDate(String days) {
		int daysInt = Integer.parseInt(days);

		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateStr = sdfd.format(date);
		return dateStr;
	}

5.获取N天以后是周几

	/* 得到n天之后是周几*/
	public static String getAfterDayWeek(String days) {
		int daysInt = Integer.parseInt(days);
		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdf = new SimpleDateFormat("E");
		String dateStr = sdf.format(date);
		return dateStr;
	}

6. 获取当前时间的周一和周日的日期

	/*获取当前时间的周一及周日*/
	public Map<String,String> getWeekDate(Date date) {
		Map<String,String> map = new HashMap();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
		cal.setFirstDayOfWeek(Calendar.MONDAY);
		// 获得当前日期是一个星期的第几天
		int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
		if(dayWeek==1){
			dayWeek = 8;
		}
		// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
		cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
		Date mondayDate = cal.getTime();
		String weekBegin = sdf.format(mondayDate);
		//获取星期日
		cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
		Date sundayDate = cal.getTime();
		String weekEnd = sdf.format(sundayDate);
		map.put("mondayDate", weekBegin);
		map.put("sundayDate", weekEnd);
		return map;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值