java计算指定日期之前几个月份的日期

可以计算随意两个日期的环比数据。比如,我想计算2021-03~2021~04这两个月份的交易额的环比数据,也就是要和2021-01~2021-02的数据对比。

现在,已知的startTime=“2021-03”;endTime="2021-04"

需要计算出2个月之前的开始时间和结束时间的时间区间。

接下来是代码:首先计算,两个时间之间的月份差

/**
     * 计算两个日期间相差几个月
     *
     * @param startDate
     * @param endDate
     * @return
     */
    public static int dayCompare(String startDate, String endDate) {
        //时间格式,根据自己的情况设置
        DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
        try {
            //先把字符串类型的时间,转化成Date类型
            Date startdate = simpleDateFormat.parse(startDate);
            Date enddate = simpleDateFormat.parse(endDate);
            //给日历设置相应的时间
            Calendar from = Calendar.getInstance();
            from.setTime(startdate);
            Calendar to = Calendar.getInstance();
            to.setTime(enddate);
            //只要年月
            int fromYear = from.get(Calendar.YEAR);
            int fromMonth = from.get(Calendar.MONTH);

            int toYear = to.get(Calendar.YEAR);
            int toMonth = to.get(Calendar.MONTH);

            /**
             * 下面是年、月、日差的计算,可根据情况返回相应结果
             */
            //int year = toYear  -  fromYear;//年份差
            int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth);//月份差
            //int day = (int) ((to.getTimeInMillis()  -  from.getTimeInMillis())  /  (24  *  3600  *  1000));//天数差
            return month;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

从上边的代码,可以获取两个时间相差几个月;

接下来,就是计算新的开始时间和结束时间:

/**
     * 获取指定日期的前N月
     * @param timeStr
     * @param format
     * @param num
     * @return
     */
    public static String getBeforeNumMonthOfTime(String timeStr, String format, int num) {
        Calendar cal = Calendar.getInstance();
        DateFormat simpleDateFormat = new SimpleDateFormat(format);
        try {
            Date date = simpleDateFormat.parse(timeStr);
            cal.setTime(date);
            cal.add(Calendar.MONTH, -num);
            Date time = cal.getTime();
            return simpleDateFormat.format(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

这段代码,就是获取新的时间区间的代码。

这两段代码的调取,先计算月份差,再获取时间区间

这里边DateUtil是工具类,我把计算日期的代码封装到了这里边。

public void getTimDif(){
    String startTime = "2021-03";
    String endTime = "2021-04";
    int timeDif = DateUtil.dayCompare(startTime,endTime);//时间差(月份)
    String lastStartTime = DateUtil.getBeforeNumMonthOfTime(startTime,"yyyy-MM",timeDif+1);
    String lastEndTime = DateUtil.getBeforeNumMonthOfTime(endTime,"yyyy-MM",timeDif+1);
    System.out.println("开始时间:"+lastStartTime+";结束时间:"+lastEndTime);
}

以上笔记为个人业务所用,有不同的意见,可留言指正,谢谢大家~~~!!!

 

一切美好的遇见都是命中注定~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值