wxr
2022-10-28 bab36f8002d92e7125dfc40023f566266e3fdb38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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;
        }
    }
}