可以计算随意两个日期的环比数据。比如,我想计算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);
}
以上笔记为个人业务所用,有不同的意见,可留言指正,谢谢大家~~~!!!
一切美好的遇见都是命中注定~