Java日期时间API系列27-----Jdk8中java.time包中的新的日期时间API类,使用xk-time工具类创建日历应用。

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!

欢迎提问题和建议!

源代码地址:https://github.com/xkzhangsan/xk-time

猜你喜欢

转载自www.cnblogs.com/xkzhangsanx/p/12535870.html