说到这个我勒个去,查各种资料查到想吐!!!废话不多说,往下看 👇👇👇
先说一个大家都会普遍见到的一个案例:在一个时间范围内,根据年月日按不同月份分割;估计这个也难不倒大家,不过我还是要说说吧,毕竟是我花了几天扒拉出来的,也是为了方便以后学习哈!!!!
案例一:
/**
* 根据一段时间区间,按月份拆分成多个时间段
* @param startDate 开始日期
* @param endDate 结束日期
* @return
*/
@SuppressWarnings("deprecation")
public List<DateSplitIten> getDateSplitIten(String startDate, String endDate) {
List<DateSplitIten> list = null;
try {
list = new ArrayList<>();//存储时间集合
String firstDay = "";
String lastDay = "";
Date d1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startDate);// 定义起始日期
Date d2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endDate);// 定义结束日期
Calendar dd = Calendar.getInstance();// 定义日期实例
dd.setTime(d1);// 设置日期起始时间
Calendar cale = Calendar.getInstance();
Calendar c = Calendar.getInstance();
c.setTime(d2);
int startDay = d1.getDate();
int endDay = d2.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateSplitIten dateSplitIten = null;
while (dd.getTime().before(d2)) {
// 判断是否到结束日期
dateSplitIten= new DateSplitIten();
cale.setTime(dd.getTime());
if(dd.getTime().equals(d1)){
cale.set(Calendar.DAY_OF_MONTH, dd
.getActualMaximum(Calendar.DAY_OF_MONTH));
lastDay = sdf.format(cale.getTime());
dateSplitIten.setStartDate(sdf.format(d1));
dateSplitIten.setEndDate(lastDay);
}else if(dd.get(Calendar.MONTH) == d2.getMonth() && dd.get(Calendar.YEAR) == c.get(Calendar.YEAR)){
cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
firstDay = sdf.format(cale.getTime());
dateSplitIten.setStartDate(firstDay);
dateSplitIten.setEndDate(sdf.format(d2));
}else {
cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
firstDay = sdf.format(cale.getTime());
cale.set(Calendar.DAY_OF_MONTH, dd
.getActualMaximum(Calendar.DAY_OF_MONTH));
lastDay = sdf.format(cale.getTime());
dateSplitIten.setStartDate(firstDay)