/**
* 获取时间段内的自然周
*
* @param dateStart
* @param dateEnd
* @return
*/
public List<Set<String>> getNatureWeeks(String dateStart, String dateEnd) {
List<Set<String>> natureWeekList = new ArrayList<>();
try {
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
int startDateNum = Integer.parseInt(dateStart);
int endDateNum = Integer.parseInt(dateEnd);
if (startDateNum >= endDateNum) {
return natureWeekList;
}
Date startDate = dateFormat.parse(dateStart);
Calendar calendar = new GregorianCalendar();
calendar.setTime(startDate);
for (; ; ) {
int dayOfWeeek = new Integer(calendar.get(Calendar.DAY_OF_WEEK));
//周一(周日-周一...周五-周六依次用1-7表示)
if (dayOfWeeek == 2) {
calendar.add(Calendar.DATE, 6);
int dateNum = Integer.parseInt(dateFormat.format(calendar.getTime()));
if (dateNum <= endDateNum) {
Set natureWeek = new LinkedHashSet();
calendar.add(Calendar.DATE, -6);
for (int i = 0; i < 7; i++) {
String day = dateFormat.format(calendar.getTime());
natureWeek.add(day);
calendar.add(Calendar.DATE, 1);
}
natureWeekList.add(natureWeek);
} else {
break;
}
} else {
calendar.add(Calendar.DATE, 1);
}
}
} catch (ParseException e) {
System.out.print("获取时间段内的自然周异常,"+e.toString());
}
return natureWeekList;
}
/**
* 获取时间段内的满月
*
* @param dateStart
* @param dateEnd
* @return
*/
public List<Set<String>> getFullMonth(String dateStart, String dateEnd) {
List<Set<String>> fullMonthList = new ArrayList<>();
try {
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
//起始时间
Calendar calendar = new GregorianCalendar();
calendar.setTime(dateFormat.parse(dateStart));
int startDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
//获取当前月的第一天
int firstDayOfMonth = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
if (firstDayOfMonth < startDayOfMonth) {
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, firstDayOfMonth);
}
//结束时间
Calendar cld = new GregorianCalendar();
cld.setTime(dateFormat.parse(dateEnd));
int endDayOfMonth = cld.get(Calendar.DAY_OF_MONTH);
//获取当月最后一天
int lastDayOfyMonth = cld.getActualMaximum(Calendar.DAY_OF_MONTH);
if (endDayOfMonth < lastDayOfyMonth) {
cld.add(Calendar.MONTH, -1);
cld.set(Calendar.DAY_OF_MONTH, cld.getActualMaximum(Calendar.DAY_OF_MONTH));
}
int endDateNum = Integer.parseInt(dateFormat.format(cld.getTime()));
for (; ; ) {
int startDateNum = Integer.parseInt(dateFormat.format(calendar.getTime()));
if (startDateNum < endDateNum) {
Set monthSet = new LinkedHashSet();
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < maxDay; i++) {
monthSet.add(dateFormat.format(calendar.getTime()));
calendar.add(Calendar.DATE, 1);
}
fullMonthList.add(monthSet);
} else {
break;
}
}
} catch (Exception e) {
System.out.print("获取时间段内的满月异常,"+e.toString());
}
return fullMonthList;
}