
正文
java 给定一个日期期间 返回形如Mar 2015 3/20-3/31的数据
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
最近一个项目中有个前台对于表头要求:
给定一个日期期间返回形如
Mar 2015 3/20-3/31
Apr 2015 4/1-4/30
这样的月年数据,简单的写了下代码,暂时没想到更好的办法
例如传进来的参数是 "2015-03-20"-"2016-04-08" 这样的形式
分三段处理:
第一段:起始日期的起始日期的月底
第二段:开始和结束月之间的所有月数据
第三段:结束日期的月初到结束日期
public List<String> loadMonthStr(String startDate, String endDate) throws Exception {
List<String> periodList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
GregorianCalendar cdStart = new GregorianCalendar();
GregorianCalendar cdEnd = new GregorianCalendar();
cdStart.setTime(sdf.parse(startDate));
cdEnd.setTime(sdf.parse(endDate)); sdf = new SimpleDateFormat("MMM yyyy", Locale.US);
int firstStart = cdStart.get(Calendar.DAY_OF_MONTH); int lastEnd = cdEnd.get(Calendar.DAY_OF_MONTH);
int monthOfYear = cdStart.get(Calendar.MONTH) + 1; boolean sameYearMonth = false;
String dateStr;
if (cdStart.get(Calendar.MONTH) == cdEnd.get(Calendar.MONTH) && cdStart.get(Calendar.YEAR) == cdEnd.get(Calendar.YEAR)) {
sameYearMonth = true;
} if (sameYearMonth) {
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + firstStart + "-" + monthOfYear + "/" + lastEnd;
periodList.add(dateStr);
} else {
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + cdStart.get(Calendar.DAY_OF_MONTH) + "-"
+ monthOfYear + "/" + cdStart.getMaximum(Calendar.DAY_OF_MONTH);
periodList.add(dateStr);
cdStart.set(Calendar.DAY_OF_MONTH, 1);
cdEnd.set(Calendar.DAY_OF_MONTH, 1);
cdStart.add(Calendar.MONTH, 1);
int startDay = 0;
int endDay = 0;
while (cdStart.compareTo(cdEnd) < 0) {
monthOfYear = cdStart.get(Calendar.MONTH) + 1;
startDay = 1;
endDay = cdStart.getActualMaximum(Calendar.DAY_OF_MONTH);
dateStr = sdf.format(cdStart.getTime()) + " " + monthOfYear + "/" + startDay + "-" + monthOfYear + "/" + endDay;
cdStart.add(Calendar.MONTH, 1);
periodList.add(dateStr);
}
dateStr = sdf.format(cdEnd.getTime()) + " " + (cdEnd.get(Calendar.MONTH) + 1) + "/" + 1 + "-"
+ (cdEnd.get(Calendar.MONTH) + 1) + "/" + lastEnd;
periodList.add(dateStr);
}
return periodList;
}






