/**
* 在日期上增加固定天数
* @param date:日期
* @param day:天数
* @return
*/
public static Date queryDate(Date date ,int day){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH,day);
return calendar.getTime();
}
/**
* 得到二个日期间的间隔天数
* @param endTime 结束时间
* @param startTime 开始时间
* @return
*/
public static int getTwoDay(Date endTime, Date startTime) {
int day = 0;
try {
day = (int) ((endTime.getTime() - startTime.getTime()) / (24 * 60 * 60 * 1000)+1);
} catch (Exception e) {
return 0;
}
return day;
}
/**
* 统计两个日期时间段每个月对应的中间日期
* @param endTime 结束时间
* @param startTime 开始时间
* @return
*/
public static List<Date> getDateList(Date endTime, Date startTime) throws ParseException {
Calendar max = Calendar.getInstance();
max.setTime(endTime);
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar min = Calendar.getInstance();
min.setTime(startTime);
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
Calendar curr = min;
List<Date> result = new ArrayList<>();
while (curr.before(max)) {
result.add(curr.getTime());
curr.add(Calendar.MONTH, 1);
}
int day;
Date minMothDate = null;
Date maxMothDate = null;
List<Date> list = new ArrayList<>();
Calendar currMonthCal = Calendar.getInstance();
for (int i=0; i<result.size(); i++){
if (i == 0){ //处理开始日期时间
if (result.size() == 1){ //处理开始时间和结束时间是同年同月的情况
minMothDate = startTime;
maxMothDate = endTime;
}else {
minMothDate = startTime;
currMonthCal.setTime(result.get(i));
//设置当前月最后一天
currMonthCal.set(Calendar.DAY_OF_MONTH, currMonthCal.getActualMaximum(Calendar.DAY_OF_MONTH));
maxMothDate = currMonthCal.getTime();
}
day = getTwoDay(maxMothDate,minMothDate);
}else if (i == result.size()-1){ //处理最后一次时间
maxMothDate = endTime;
currMonthCal.setTime(result.get(i));
currMonthCal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
minMothDate = currMonthCal.getTime();
day = getTwoDay(maxMothDate,minMothDate);
}else{
currMonthCal.setTime(result.get(i));
currMonthCal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
minMothDate = currMonthCal.getTime();
//设置当前月最后一天
currMonthCal.set(Calendar.DAY_OF_MONTH, currMonthCal.getActualMaximum(Calendar.DAY_OF_MONTH));
maxMothDate = currMonthCal.getTime();
day = getTwoDay(maxMothDate,minMothDate);
}
if( (day+2)%2 == 0){//避免day是0的情况
int days = day/2;
Date queryDate = queryDate(minMothDate, days);
list.add(queryDate);
}else{//奇数
int days = (day+1)/2;
Date queryDate = queryDate(minMothDate, days-1);
list.add(queryDate);
}
}
return list;
}
* 在日期上增加固定天数
* @param date:日期
* @param day:天数
* @return
*/
public static Date queryDate(Date date ,int day){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH,day);
return calendar.getTime();
}
/**
* 得到二个日期间的间隔天数
* @param endTime 结束时间
* @param startTime 开始时间
* @return
*/
public static int getTwoDay(Date endTime, Date startTime) {
int day = 0;
try {
day = (int) ((endTime.getTime() - startTime.getTime()) / (24 * 60 * 60 * 1000)+1);
} catch (Exception e) {
return 0;
}
return day;
}
/**
* 统计两个日期时间段每个月对应的中间日期
* @param endTime 结束时间
* @param startTime 开始时间
* @return
*/
public static List<Date> getDateList(Date endTime, Date startTime) throws ParseException {
Calendar max = Calendar.getInstance();
max.setTime(endTime);
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar min = Calendar.getInstance();
min.setTime(startTime);
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
Calendar curr = min;
List<Date> result = new ArrayList<>();
while (curr.before(max)) {
result.add(curr.getTime());
curr.add(Calendar.MONTH, 1);
}
int day;
Date minMothDate = null;
Date maxMothDate = null;
List<Date> list = new ArrayList<>();
Calendar currMonthCal = Calendar.getInstance();
for (int i=0; i<result.size(); i++){
if (i == 0){ //处理开始日期时间
if (result.size() == 1){ //处理开始时间和结束时间是同年同月的情况
minMothDate = startTime;
maxMothDate = endTime;
}else {
minMothDate = startTime;
currMonthCal.setTime(result.get(i));
//设置当前月最后一天
currMonthCal.set(Calendar.DAY_OF_MONTH, currMonthCal.getActualMaximum(Calendar.DAY_OF_MONTH));
maxMothDate = currMonthCal.getTime();
}
day = getTwoDay(maxMothDate,minMothDate);
}else if (i == result.size()-1){ //处理最后一次时间
maxMothDate = endTime;
currMonthCal.setTime(result.get(i));
currMonthCal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
minMothDate = currMonthCal.getTime();
day = getTwoDay(maxMothDate,minMothDate);
}else{
currMonthCal.setTime(result.get(i));
currMonthCal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
minMothDate = currMonthCal.getTime();
//设置当前月最后一天
currMonthCal.set(Calendar.DAY_OF_MONTH, currMonthCal.getActualMaximum(Calendar.DAY_OF_MONTH));
maxMothDate = currMonthCal.getTime();
day = getTwoDay(maxMothDate,minMothDate);
}
if( (day+2)%2 == 0){//避免day是0的情况
int days = day/2;
Date queryDate = queryDate(minMothDate, days);
list.add(queryDate);
}else{//奇数
int days = (day+1)/2;
Date queryDate = queryDate(minMothDate, days-1);
list.add(queryDate);
}
}
return list;
}