package com.mm.android.deviceaddmodule.mobilecommon.widget.calendar;
|
|
import com.mm.android.deviceaddmodule.mobilecommon.utils.TimeUtils;
|
import com.mm.android.deviceaddmodule.mobilecommon.widget.calendar.day.CalendarDay;
|
import com.mm.android.deviceaddmodule.mobilecommon.widget.calendar.month.SelectedMonth;
|
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
public class CalendarUtils
|
{
|
public static int getDaysInMonth(int month, int year) {
|
switch (month) {
|
case Calendar.JANUARY:
|
case Calendar.MARCH:
|
case Calendar.MAY:
|
case Calendar.JULY:
|
case Calendar.AUGUST:
|
case Calendar.OCTOBER:
|
case Calendar.DECEMBER:
|
return 31;
|
case Calendar.APRIL:
|
case Calendar.JUNE:
|
case Calendar.SEPTEMBER:
|
case Calendar.NOVEMBER:
|
return 30;
|
case Calendar.FEBRUARY:
|
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? 29 : 28;
|
default:
|
throw new IllegalArgumentException("Invalid Month");
|
}
|
}
|
|
// 获取本周周一
|
public static CalendarDay getMonday() {
|
Calendar calendar = Calendar.getInstance();
|
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
|
if(dayOfWeek == 1) {
|
dayOfWeek += 7;
|
}
|
calendar.add(Calendar.DATE, 2 - dayOfWeek);
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 获取本周周日
|
public static CalendarDay getSunday() {
|
Calendar calendar = Calendar.getInstance();
|
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
|
if(dayOfWeek == 1) {
|
dayOfWeek += 7;
|
}
|
calendar.add(Calendar.DATE, 2 - dayOfWeek);
|
calendar.add(Calendar.DAY_OF_WEEK, 6);
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 获取上周周一
|
public static CalendarDay getLastWeekMonday() {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
calendar.add(Calendar.DATE, -1 * 7);
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 获取上周周日
|
public static CalendarDay getLastWeekSunday() {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
calendar.add(Calendar.DATE, -1 * 7);
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 获取给定日期所在周的周一
|
public static CalendarDay getFixedMonday(int year, int month, int day) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(year, month, day);
|
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
|
if(dayWeek == 1) {
|
calendar.add(Calendar.DAY_OF_MONTH, -1);
|
}
|
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
int y = calendar.get(Calendar.DAY_OF_WEEK);
|
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - y);
|
|
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 获取给定日期所在周的周日
|
public static CalendarDay getFixedSunday(int year, int month, int day) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(year, month, day);
|
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
|
if(dayWeek == 1) {
|
calendar.add(Calendar.DAY_OF_MONTH, -1);
|
}
|
|
calendar.setFirstDayOfWeek(Calendar.MONDAY);
|
int y = calendar.get(Calendar.DAY_OF_WEEK);
|
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - y);
|
calendar.add(Calendar.DAY_OF_WEEK, 6);
|
return new CalendarDay(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
}
|
|
// 判断给定日期是否是本周
|
public static boolean isThisWeek(CalendarDay calendarDay) {
|
Calendar calendar = Calendar.getInstance();
|
if(calendarDay.getYear() != calendar.get(Calendar.YEAR)) {
|
return false;
|
}
|
|
int thisWeek = calendar.get(Calendar.WEEK_OF_YEAR);
|
|
calendar.set(calendarDay.getYear(), calendarDay.getMonth(), calendarDay.getDay());
|
int week = calendar.get(Calendar.WEEK_OF_YEAR);
|
return thisWeek == week;
|
}
|
|
// 判断给定日期是否是上周
|
public static boolean isLastWeek(CalendarDay calendarDay) {
|
CalendarDay lastWeekMonday = getLastWeekMonday();
|
Calendar lastWeekMondayCal = Calendar.getInstance();
|
lastWeekMondayCal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
lastWeekMondayCal.set(lastWeekMonday.getYear(), lastWeekMonday.getMonth(), lastWeekMonday.getDay());
|
|
CalendarDay lastWeekSunday = getLastWeekSunday();
|
Calendar lastWeekSundayCal = Calendar.getInstance();
|
lastWeekSundayCal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
lastWeekSundayCal.set(lastWeekSunday.getYear(), lastWeekSunday.getMonth(), lastWeekSunday.getDay());
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
calendar.set(calendarDay.getYear(), calendarDay.getMonth(), calendarDay.getDay());
|
|
// return !calendar.before(lastWeekMondayCal) && !calendar.after(lastWeekSundayCal);
|
return isInTime(calendar.getTime(), lastWeekMondayCal.getTime(), lastWeekSundayCal.getTime(), "yyyy-MM-dd");
|
}
|
|
public static String getKeyByCalendarDay(CalendarDay calendarDay) {
|
return String.valueOf(calendarDay.getYear()) + calendarDay.getMonth() + calendarDay.getDay();
|
}
|
|
public static String getKeyByYearMonthDay(int year, int month, int day) {
|
return String.valueOf(year) + month + day;
|
}
|
|
public static String getKeyBySelectedMonth(SelectedMonth selectedMonth) {
|
return String.valueOf(selectedMonth.getYear()) + selectedMonth.getMonth();
|
}
|
|
public static String getKeyByYearMonth(int year, int month) {
|
return String.valueOf(year) + month;
|
}
|
|
// 获取给定日期所在周的周一
|
public static String getKeyByFixedMonday(int year, int month, int day) {
|
CalendarDay calendarDay = getFixedMonday(year, month, day);
|
|
return getKeyByYearMonthDay(calendarDay.getYear(), calendarDay.getMonth(), calendarDay.getDay());
|
}
|
|
// 判断是否在某个时间范围之内
|
public static boolean isInTime(Date date, Date before, Date after, String pattern) {
|
try {
|
SimpleDateFormat sdf = TimeUtils.getDateFormatWithUS(pattern);
|
String dateStr = sdf.format(date);
|
date = sdf.parse(dateStr);
|
String beforeStr = sdf.format(before);
|
before = sdf.parse(beforeStr);
|
String afterStr = sdf.format(after);
|
after = sdf.parse(afterStr);
|
return date.compareTo(before) >= 0 && date.compareTo(after) <= 0;
|
}catch (Exception e) {
|
return false;
|
}
|
}
|
}
|