1.日历相关类
1.1 日历类 CalendarWrapper
package com.xkzhangsan.time.calendar; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 日历 * * @ClassName: CalendarWrapper * @Description: CalendarWrapper * @author xkzhangsan * @date 2020年03月18日 */ public class CalendarWrapper implements Serializable{ private static final long serialVersionUID = 1L; private List<YearWrapper> years; private Map<String, DayWrapper> dayMap = new ConcurrentHashMap<String, DayWrapper>(); public CalendarWrapper() { super(); } public CalendarWrapper(List<YearWrapper> years, Map<String, DayWrapper> dayMap) { super(); this.years = years; this.dayMap = dayMap; } public CalendarWrapper(List<YearWrapper> years) { super(); this.years = years; } public List<YearWrapper> getYears() { return years; } public void setYears(List<YearWrapper> years) { this.years = years; } public Map<String, DayWrapper> getDayMap() { return dayMap; } public void setDayMap(Map<String, DayWrapper> dayMap) { this.dayMap = dayMap; } }
1.2 日历年类 YearWrapper
package com.xkzhangsan.time.calendar; import java.io.Serializable; import java.util.List; import com.xkzhangsan.time.calculator.DateTimeCalculatorUtil; /** * 年 * * @ClassName: YearWrapper * @Description: YearWrapper * @author xkzhangsan * @date 2020年03月18日 */ public class YearWrapper implements Serializable{ private static final long serialVersionUID = 1L; private int year; private List<MonthWrapper> months; private boolean isLeapYear; public YearWrapper(int year, List<MonthWrapper> months) { super(); this.year = year; this.months = months; this.isLeapYear = DateTimeCalculatorUtil.isLeapYear(year); } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public List<MonthWrapper> getMonths() { return months; } public void setMonths(List<MonthWrapper> months) { this.months = months; } public boolean isLeapYear() { return isLeapYear; } public void setLeapYear(boolean isLeapYear) { this.isLeapYear = isLeapYear; } }
1.3 日历月类 MonthWrapper
package com.xkzhangsan.time.calendar; import java.io.Serializable; import java.util.List; /** * 月 * * @ClassName: MonthWrapper * @Description: MonthWrapper * @author xkzhangsan * @date 2020年03月18日 */ public class MonthWrapper implements Serializable{ private static final long serialVersionUID = 1L; private int month; private List<DayWrapper> days; public MonthWrapper(int month, List<DayWrapper> days) { super(); this.month = month; this.days = days; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public List<DayWrapper> getDays() { return days; } public void setDays(List<DayWrapper> days) { this.days = days; } }
1.4 日历日类 DayWrapper
package com.xkzhangsan.time.calendar; import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; import com.xkzhangsan.time.calculator.DateTimeCalculatorUtil; import com.xkzhangsan.time.constants.Constant; import com.xkzhangsan.time.converter.DateTimeConverterUtil; import com.xkzhangsan.time.formatter.DateTimeFormatterUtil; /** * 日 * * @ClassName: DayWrapper * @Description: DayWrapper * @author xkzhangsan * @date 2020年03月18日 */ public class DayWrapper implements Serializable{ private static final long serialVersionUID = 1L; private Date date; private LocalDateTime localDateTime; private String dateStr; private int day; private String weekStr; private Object obj; public DayWrapper(LocalDateTime localDateTime) { this(localDateTime, null); } public DayWrapper(LocalDateTime localDateTime, Object obj) { super(); this.localDateTime = localDateTime; this.date = DateTimeConverterUtil.toDate(localDateTime); this.dateStr = DateTimeFormatterUtil.formatToDateStr(localDateTime); this.day = localDateTime.getDayOfMonth(); if(Constant.getInstance().isChinese()){ this.weekStr = DateTimeCalculatorUtil.getDayOfWeekCn(localDateTime); }else{ this.weekStr = DateTimeCalculatorUtil.getDayOfWeekEnLong(localDateTime); } this.obj = obj; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public LocalDateTime getLocalDateTime() { return localDateTime; } public void setLocalDateTime(LocalDateTime localDateTime) { this.localDateTime = localDateTime; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public String getDateStr() { return dateStr; } public void setDateStr(String dateStr) { this.dateStr = dateStr; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public String getWeekStr() { return weekStr; } public void setWeekStr(String weekStr) { this.weekStr = weekStr; } }
1.5 日历工具类 CalendarUtil
package com.xkzhangsan.time.calendar; import java.time.LocalDateTime; import java.time.YearMonth; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.xkzhangsan.time.calculator.DateTimeCalculatorUtil; import com.xkzhangsan.time.formatter.DateTimeFormatterUtil; /** * 日历工具类 * * @ClassName: CalendarUtil * @Description: CalendarUtil * @author xkzhangsan * @date 2020年03月18日 */ public class CalendarUtil { private CalendarUtil() { } /** * 生成指定年月的日历 * @param year * @param month * @return */ public static CalendarWrapper generateCalendar(int year, int month){ CalendarWrapper calendarWrapper = new CalendarWrapper(); Map<String, DayWrapper> dayMap = new ConcurrentHashMap<String, DayWrapper>(); List<LocalDateTime> localDateTimeList = DateTimeCalculatorUtil.getLocalDateTimeList(YearMonth.of(year, month)); if(localDateTimeList == null || localDateTimeList.isEmpty()){ return calendarWrapper; } List<DayWrapper> dayWrapperList = new ArrayList<>(); localDateTimeList.stream().forEach(localDateTime->{ DayWrapper dayWrapper = new DayWrapper(localDateTime); dayWrapperList.add(dayWrapper); dayMap.put(DateTimeFormatterUtil.formatToDateStr(localDateTime), dayWrapper); }); MonthWrapper monthWrapper = new MonthWrapper(month, dayWrapperList); List<MonthWrapper> monthWrapperList = new ArrayList<>(); monthWrapperList.add(monthWrapper); YearWrapper yearWrapper = new YearWrapper(year, monthWrapperList); List<YearWrapper> yearWrapperList = new ArrayList<>(); yearWrapperList.add(yearWrapper); calendarWrapper = new CalendarWrapper(yearWrapperList, dayMap); return calendarWrapper; } /** * 生成指定年的日历 * @param year * @return */ public static CalendarWrapper generateCalendar(int year){ CalendarWrapper calendarWrapper = new CalendarWrapper(); Map<String, DayWrapper> dayMap = new ConcurrentHashMap<String, DayWrapper>(); List<MonthWrapper> monthWrapperList = new ArrayList<>(); for(int i=1; i<=12; i++){ List<LocalDateTime> localDateTimeList = DateTimeCalculatorUtil.getLocalDateTimeList(YearMonth.of(year, i)); if(localDateTimeList == null || localDateTimeList.isEmpty()){ continue; } List<DayWrapper> dayWrapperList = new ArrayList<>(); localDateTimeList.stream().forEach(localDateTime->{ DayWrapper dayWrapper = new DayWrapper(localDateTime); dayWrapperList.add(dayWrapper); dayMap.put(DateTimeFormatterUtil.formatToDateStr(localDateTime), dayWrapper); }); MonthWrapper monthWrapper = new MonthWrapper(i, dayWrapperList); monthWrapperList.add(monthWrapper); } List<YearWrapper> yearWrapperList = new ArrayList<>(); YearWrapper yearWrapper = new YearWrapper(year, monthWrapperList); yearWrapperList.add(yearWrapper); calendarWrapper = new CalendarWrapper(yearWrapperList, dayMap); return calendarWrapper; } }
2.日历应用使用
测试代码:
@Test public void calendarTest(){ //获取2020年日历 CalendarWrapper calendarWrapper = CalendarUtil.generateCalendar(2020); //输出年 System.out.println(calendarWrapper.getYears().get(0).getYear()); //输出1月 System.out.println(calendarWrapper.getYears().get(0).getMonths().get(0).getMonth()); //输出1日 System.out.println(calendarWrapper.getYears().get(0).getMonths().get(0).getDays().get(0).getDay()); //输出1日日期格式化 System.out.println(calendarWrapper.getYears().get(0).getMonths().get(0).getDays().get(0).getDateStr()); //输出1日星期 System.out.println(calendarWrapper.getYears().get(0).getMonths().get(0).getDays().get(0).getWeekStr()); //输出1日的数据值 System.out.println(calendarWrapper.getYears().get(0).getMonths().get(0).getDays().get(0).getObj()); //获取指定日期的天,并对当前天设置数据值 DayWrapper dayW = calendarWrapper.getDayMap().get("2020-03-15"); if(dayW != null){ dayW.setObj("hello 2020-03-15!"); } //获取指定日期的天的数据值 System.out.println(calendarWrapper.getDayMap().get("2020-03-15").getObj()); System.out.println(calendarWrapper.getYears().get(0).getMonths().get(2).getDays().get(14).getObj()); }
输出:
2020 1 1 2020-01-01 星期三 null hello 2020-03-15! hello 2020-03-15!
欢迎提问题和建议!