DateUtil:
public class DateUtil{
private static final String SDF_YMD_H = "yyyy-MM-dd HH:mm:ss";
private static final String SDF_YMD = "yyyy-MM-dd";
private static final String SDF_YM = "yyyy-MM";
private static final String SDF_Y = "yyyy";
private static final String SDF_MD = "MM-dd";
/**
*获取时间段内每个月的最后一天,当月的获取会计日期
*/
public static List<String> getMonth(String startTime,String endTime,String dateStr){
Calendar calendar = Calendar.getInstance();
//声明日期格式为 yyyy-MM
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YM);
//获取开始时间
String monthStartTime = startTime.subString(0,7);
//获取结束时间
String monthEndTime = endTime.subString(0,7);
//存储每月最后一天日期结果集合
List<String> dateList = new ArrayList<>();
//存储某时间段中的各个月份
List<String> monthDateList = new ArrayList<>();
try{
//设置开始时间
calendar.setTime(sdf.parse(monthStartTime));
//把开始时间添加到list中
monthDateList.add(monthStartTime);
while(true){
//根据日期规则,为给定的日历字段添加或减去指定的时间量
calendar.add(Calendar.MONTH,1);
//判断此日期是否在制定日期之后
if(sdf.parse(monthEndTime).after(calendar.getTime()) || sdf.parse(monthEndTime).equals(calendar.getTime())){
monthDateList.add(sdf.format(calendar.getTime()));
}else{
break;
}
}
}catch(ParseException e){
e.printStackTrace();
}
//遍历月的集合,获取每个月的最后一天时间
dateList = getMonthList(monthDateList,dateStr);
return dateList;
}
public static List<String> getMonthList(List<String> list,String dateStr){
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YMD);
//会计日期
String dateStrTime = dateStr.subString(0,7);
//存储每个月月末时间集合
List<String> dateList = new ArrayList<>();
for(String date:list){
if(dateStrTime.equals(date)){
dateList.add(dateStr);
}else{
//截取年数
String yearStr = date.substring(0,4);
int year = Integer.parseInt(yearStr);
String monthStr = date.substring(5,7);
int month = Integer.parseInt(monthStr);
//设置年月
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
calendar.set(Calendar.DAY_OF_MONTH,0);
String lastDay = sdf.format(calendar.getTime());
dateList.add(lastDay);
}
}
return dateList;
}
/**
* 获取时间段内每个季度的最后一天,会计日期所在月获取会计日期
*/
public static List<String> getQuarter(String startTime,String endTime,String dateStr){
Calendar calendar = Calendar.getInstance();
//声明日期格式
SimpleDateFormat sdf = new SimpleDateFormat("SDF_YM");
//获取开始时间
String monthStartTime = startTime.substring(0,7);
//获取结束时间
String monthEndTime = endTime.substring(0,7);
//获取开始月份所在季度的最后月份
String startDate = getStrTimeMonth(startTime);
//获取结束月份所在季度的最后月份
String endDate = getStrTimeMonth(endTime);
//存储每月最后一天日期
List<String> dateList = new ArrayList<String>();
//存储某时间段中的各个月份
List<String> monthDateList = new ArrayList<String>();
if(startDate.equals(endDate)) {
monthDateList.add(startTime);
}else {
try {
//设置开始时间
calendar.setTime(sdf.parse(monthStartTime));
//把开始时间添加到list中
monthDateList.add(monthStartTime);
while(true){
//判断此日期是否是每季末,是否在指定日期后
int month = calendar.get(Calendar.MONTH)+1;
//根据日期规则,为给定的日历字段添加或减去指定的时间量
if(sdf.parse(monthEndTime).after(calendar.getTime()) || sdf.parse(monthEndTime).equals(calendar.getTime())){
if(month==3 || month==6 || month==9 || month==12) {
monthDateList.add(sdf.format(calendar.getTime()));
}
}else{
break;
}
//根据日期的规则,为给定的日历字段添加或减去指定的时间量
calendar.add(Calendar.MONTH, 1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//获取每月最后一天的日期
dateList = getQuarterList(monthDateList,dateStr);
return dateList;
}
private static List<String> getQuarterList(List<String> monthDateList, String dateStr) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(SDF_YMD);
//获取会计日期所在月
String dateStrTime = getStrTimeMonth(dateStr);
//存储每个月月末时间
List<String> dateList = new ArrayList<String>();
for(String date:monthDateList) {
if(dateStrTime.equals(date)) {//会计日期所在季
dateList.add(dateStr);
}else {
//截取年份
String yearStr = date.substring(0,4);
int year = Integer.parseInt(yearStr);
String monthStr = date.substring(5,7);
int month = Integer.parseInt(monthStr);
//设置年月
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, 0);
String lastDay = sdf.format(calendar.getTime());
dateList.add(lastDay);
}
}
return dateList;
}
private static String getStrTimeMonth(String dateStr) {
String quarterTime = "";
String monthTime = dateStr.substring(5,7);
String yearTime = dateStr.substring(0,4);
if("01".equals(monthTime)||"02".equals(monthTime)||"03".equals(monthTime)) {
quarterTime = yearTime+"-03";
}
if("04".equals(monthTime)||"05".equals(monthTime)||"06".equals(monthTime)) {
quarterTime = yearTime+"-06";
}
if("07".equals(monthTime)||"08".equals(monthTime)||"09".equals(monthTime)) {
quarterTime = yearTime+"-09";
}
if("10".equals(monthTime)||"11".equals(monthTime)||"12".equals(monthTime)) {
quarterTime = yearTime+"-12";
}
return quarterTime;
}
}