private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
1: //获取指定月的第一天或者最后一天
public static String getFirstOrLastDayOfMonth(String days,int status) {//0获取第一天,1获取最后一天
String[] dayArry = days.split("-");
int year = Integer.parseInt(dayArry[0]);
int month = Integer.parseInt(dayArry[1]);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
if (status==0) {//
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
}else {
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
}
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
2:// 获取当前日期的上*周,或者下*周
public static String[] getDate(String status, String gotoDate, String baseday) throws Exception {
SimpleDateFormat sdff = new SimpleDateFormat("yyyy-MM-dd");
String[] dateList = new String[7];
Date sdate = null;
if (gotoDate == null || gotoDate == "")
sdate = new Date();
else
sdate = sdff.parse(gotoDate);// 设置要跳转的日期
if (status != null && status != "") {
Calendar calendar = Calendar.getInstance();
Date base = null;
if (baseday != null && baseday != "") {
sdate = sdff.parse(baseday);
}
calendar.setTime(sdate);
if (status.equals("0")) {
sdate = new Date();
if (baseday != null && baseday != "") {
sdate = sdff.parse(baseday);
}
} else if (status.equals("99")) {
sdate = new Date();
} else {
int state1 = Integer.parseInt(status);
calendar.add(Calendar.DATE, 7 * state1);// 日期减一
sdate = calendar.getTime();
}
}
Calendar cal = Calendar.getInstance();
cal.setTime(sdate);
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
Date mon = cal.getTime();
dateList[0] = sdff.format(mon);
for (int i = 1; i < dateList.length; i++) {
cal.add(Calendar.DATE, 1);
dateList[i] = sdff.format(cal.getTime());
}
return dateList;
}
3: // 获取某一年某个月的每一天
public static List getMonthFullDay(String days, int status) throws Exception {//status -1 0 1(上 本 下)
String[] dayArry = days.split("-");
int year = Integer.parseInt(dayArry[0]);
int month = Integer.parseInt(dayArry[1]) - 1 + status;
List fullDayList = new ArrayList();
Calendar cal = Calendar.getInstance();// 获得当前日期对象
cal.clear();// 清除信息
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);// 1月从0开始
cal.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
int count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int j = 0; j <= (count - 1);) {
if (sdf.format(cal.getTime()).equals(getFirstOrLastDayOfMonth(days,1)))
break;
cal.add(Calendar.DAY_OF_MONTH, j == 0 ? +0 : +1);
j++;
fullDayList.add(sdf.format(cal.getTime()));
}
return fullDayList;
}
4:日历 // 获取当前月以及附近天数,共42天
public static List getDays(String days, int status) throws Exception {
if (days == null || days == "")
days = sdf.format(new Date());
List fullDayList = getMonthFullDay(days, status);// 本月的日期
// 补全第一个星期(有可能含有上一个月的日期)
String Mfirst = fullDayList.get(0).toString();// 本月的第一天
String[] firstWeek = getDate(null, Mfirst, null);// 获取本月第一天的周
List returnList = new ArrayList();
int week = new CalendarTools().getWeek(sdf.parse(Mfirst));// 获取到是星期几
for (int i = 0; i < firstWeek.length - (8 - week); i++) {
returnList.add(firstWeek[i]);
}
returnList.addAll(fullDayList);
// 如果不满足42天,找下一个月的日期补足
if (returnList.size() < 42) {
Date date = new CalendarTools().getNexMonthDate(sdf.parse(days));// 获取下一个月的日期
List nexMonthList = getMonthFullDay(sdf.format(date), status);// 获取下一个月的所有日期
List otherDays = nexMonthList.subList(0, 42 - returnList.size());
returnList.addAll(otherDays);
}
return returnList;
}