Java日期时间API系列22-----Jdk8中java.time包中的新的日期时间API类,Month月份和DayOfWeek星期的计算。

  Java8中为月份和星期新增的了,Month和DayOfWeek,来处理月份和星期的特殊问题,这2个类都是枚举类,对Month、DayOfWeek源码说明和简单应用,月份英文,月份英文简称,月份中文,星期英文,星期英文简称,星期中文等。

1.Month

1.1 部分源码:

 * @implSpec
 * This is an immutable and thread-safe enum.
 *
 * @since 1.8
 */
public enum Month implements TemporalAccessor, TemporalAdjuster {

    /**
     * The singleton instance for the month of January with 31 days.
     * This has the numeric value of {@code 1}.
     */
    JANUARY,
    /**
     * The singleton instance for the month of February with 28 days, or 29 in a leap year.
     * This has the numeric value of {@code 2}.
     */
    FEBRUARY,
    /**
     * The singleton instance for the month of March with 31 days.
     * This has the numeric value of {@code 3}.
     */
    MARCH,
    /**
     * The singleton instance for the month of April with 30 days.
     * This has the numeric value of {@code 4}.
     */
    APRIL,

从中可以看出包含了12个月,因为实现了TemporalAccessor和TemporalAdjuster接口,它有了加减月份等功能如下:

 2.应用

为了方便中文环境应用,加一个月份名称的枚举。

package com.xkzhangsan.time.enums;

/**
 * 月份名称枚举,包含英文全称,英文检查,中文全称
 * 
 * @ClassName: MonthNameEnum
 * @Description: MonthNameEnum
 * @author xkzhangsan
 * @date 2020年02月27日
 */
public enum MonthNameEnum {
    
    Jan(1, "January", "一月", "一"),
    Feb(2, "February", "二月", "二"),
    Mar(3, "March", "三月", "三"),
    Apr(4, "April", "四月", "四"),
    May(5, "May", "五月", "五"),
    Jun(6, "June", "六月", "六"),
    Jul(7, "July", "七月", "七"), 
    Aug(8, "August", "八月", "八"),
    Sep(9, "September", "九月", "九"),
    Oct(10, "October", "十月", "十"),
    Nov(11, "November", "十一月", "十一"),
    Dec(12, "December", "十二月", "十二"),;
    
    /**
     * 序号
     */
    private int code;
    
    /**
     * 英文全称
     */
    private String fullNameEn;
    
    /**
     * 中文全称
     */
    private String fullNameCn;
    
    /**
     * 中文简称
     */
    private String shortNameCn;

    
    private MonthNameEnum(int code, String fullNameEn, String fullNameCn, String shortNameCn) {
        this.code = code;
        this.fullNameEn = fullNameEn;
        this.fullNameCn = fullNameCn;
        this.shortNameCn = shortNameCn;
    }

    /**
     * 根据code查询月份名称枚举
     * @param code
     * @return
     */
    public static MonthNameEnum getByCode(int code){
        if(code >=1 && code <= 12){
            for(MonthNameEnum monthNameEnum : MonthNameEnum.values()){
                if(monthNameEnum.getCode() == code){
                    return monthNameEnum;
                }
            }
        }
        return null;
    }
    
    /**
     * 根据code查询月份英文简称
     * @param code
     * @return
     */
    public static String getShortNameEnByCode(int code){
        MonthNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.name() : null;
    }
    
    /**
     * 根据code查询月份英文全称
     * @param code
     * @return
     */
    public static String getFullNameEnByCode(int code){
        MonthNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.getFullNameEn() : null;
    }
    
    /**
     * 根据code查询月份中文全称
     * @param code
     * @return
     */
    public static String getFullNameCnByCode(int code){
        MonthNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.getFullNameCn() : null;
    }
    
    /**
     * 根据code查询月份中文
     * @param code
     * @return
     */
    public static String getShortNameCnByCode(int code){
        MonthNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.getShortNameCn() : null;
    }

    public int getCode() {
        return code;
    }

    public String getFullNameEn() {
        return fullNameEn;
    }

    public String getFullNameCn() {
        return fullNameCn;
    }

    public String getShortNameCn() {
        return shortNameCn;
    }

}

应用代码

    /**
     * 获取月, 比如 1
     * @param date
     * @return
     */
    public static int getMonth(Date date){
        return DateTimeConverterUtil.toLocalDateTime(date).getMonthValue();
    }
    
    /**
     * 获取月, 比如 1
     * @param instant
     * @return
     */
    public static int getMonth(Instant instant){
        return DateTimeConverterUtil.toLocalDateTime(instant).getMonthValue();
    }
    
    /**
     * 获取月, 比如 1
     * LocalDateTime LocalDate ZonedDateTime 可以直接getMonthValue()
     * @param localDateTime
     * @return
     */
    public static int getMonth(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return localDateTime.getMonthValue();
    }
    
    
    
    /**
     * 获取月英文全称, 比如 January
     * January, February, March, April, May, June, July, August, September, October,
     * November and December
     * @param date
     * @return
     */
    public static String getMonthEnLong(Date date){
        return MonthNameEnum.getFullNameEnByCode(getMonth(date));
    }
    
    /**
     * 获取月英文全称, 比如 January
     * January, February, March, April, May, June, July, August, September, October,
     * November and December
     * @param instant
     * @return
     */
    public static String getMonthEnLong(Instant instant){
        return MonthNameEnum.getFullNameEnByCode(getMonth(instant));
    }
    
    /**
     * 获取月英文全称, 比如 January
     * January, February, March, April, May, June, July, August, September, October,
     * November and December
     * LocalDateTime LocalDate ZonedDateTime 可以直接.getMonth().toString()
     * @param localDateTime
     * @return
     */
    public static String getMonthEnLong(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return MonthNameEnum.getFullNameEnByCode(getMonth(localDateTime));
    }
    
    /**
     * 获取月英文简称, 比如 Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
     * @param date
     * @return
     */
    public static String getMonthEnShort(Date date){
        return MonthNameEnum.getShortNameEnByCode(getMonth(date));
    }
    
    /**
     * 获取月英文简称, 比如 Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
     * @param instant
     * @return
     */
    public static String getMonthEnShort(Instant instant){
        return MonthNameEnum.getShortNameEnByCode(getMonth(instant));
    }
    
    /**
     * 获取月英文简称, 比如 Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
     * @param localDateTime
     * @return
     */
    public static String getMonthEnShort(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return MonthNameEnum.getShortNameEnByCode(getMonth(localDateTime));
    }
    
    /**
     * 获取月份中文全称, 比如一月
     * @param date
     * @return
     */
    public static String getMonthCnLong(Date date){
        return MonthNameEnum.getFullNameCnByCode(getMonth(date));
    }
    
    /**
     * 获取月份中文全称, 比如一月
     * @param instant
     * @return
     */
    public static String getMonthCnLong(Instant instant){
        return MonthNameEnum.getFullNameCnByCode(getMonth(instant));
    }
    
    /**
     * 获取月份中文全称, 比如一月
     * @param localDateTime
     * @return
     */
    public static String getMonthCnLong(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return MonthNameEnum.getFullNameCnByCode(getMonth(localDateTime));
    }
    
    /**
     * 获取月份中文全称, 比如一
     * @param date
     * @return
     */
    public static String getMonthCnShort(Date date){
        return MonthNameEnum.getShortNameCnByCode(getMonth(date));
    }
    
    /**
     * 获取月份中文全称, 比如一
     * @param instant
     * @return
     */
    public static String getMonthCnShort(Instant instant){
        return MonthNameEnum.getShortNameCnByCode(getMonth(instant));
    }
    
    /**
     * 获取月份中文全称, 比如一
     * @param localDateTime
     * @return
     */
    public static String getMonthCnShort(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return MonthNameEnum.getShortNameCnByCode(getMonth(localDateTime));
    }

测试代码:

    /**
     * 获取月份信息,包括英文全称简称,中文等
     */
    @Test
    public void dateGetMonthTest(){
        Date date = new Date();
        System.out.println(date);
        
        System.out.println(DateTimeCalculatorUtil.getMonth(date));
        System.out.println(DateTimeCalculatorUtil.getMonthEnLong(date));
        System.out.println(DateTimeCalculatorUtil.getMonthEnShort(date));
        System.out.println(DateTimeCalculatorUtil.getMonthCnLong(date));
        System.out.println(DateTimeCalculatorUtil.getMonthCnShort(date));
    }

输出结果:

Thu Feb 27 16:01:59 CST 2020
2
February
Feb
二月
二

2.DayOfWeek

2.1  部分源码

 * @implSpec
 * This is an immutable and thread-safe enum.
 *
 * @since 1.8
 */
public enum DayOfWeek implements TemporalAccessor, TemporalAdjuster {

    /**
     * The singleton instance for the day-of-week of Monday.
     * This has the numeric value of {@code 1}.
     */
    MONDAY,
    /**
     * The singleton instance for the day-of-week of Tuesday.
     * This has the numeric value of {@code 2}.
     */
    TUESDAY,
    /**
     * The singleton instance for the day-of-week of Wednesday.
     * This has the numeric value of {@code 3}.
     */
    WEDNESDAY,
    /**
     * The singleton instance for the day-of-week of Thursday.
     * This has the numeric value of {@code 4}.
     */
    THURSDAY,
    /**
     * The singleton instance for the day-of-week of Friday.
     * This has the numeric value of {@code 5}.
     */
    FRIDAY,
    /**
     * The singleton instance for the day-of-week of Saturday.
     * This has the numeric value of {@code 6}.
     */
    SATURDAY,
    /**
     * The singleton instance for the day-of-week of Sunday.
     * This has the numeric value of {@code 7}.
     */
    SUNDAY;

从中可以看出包含了星期一到星期日,因为实现了TemporalAccessor和TemporalAdjuster接口,它有了加减星期等功能如下:

 2.2 应用

为了方便中文环境应用,加一个星期名称的枚举。

package com.xkzhangsan.time.enums;

/**
 * 星期名称枚举,包含英文全称,英文检查,中文
 * Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday
 * @ClassName: WeekNameEnum
 * @Description: WeekNameEnum
 * @author xkzhangsan
 * @date 2020年02月27日
 */
public enum WeekNameEnum {
    
    Mon(1, "Monday", "星期一"),
    Tue(2, "Tuesday", "星期二"),
    Wed(3, "Wednesday", "星期三"),
    Thu(4, "Thursday", "星期四"),
    Fri(5, "Friday", "星期五"),
    Sat(6, "Saturday", "星期六"),
    Sun(7, "Sunday", "星期日"),;
    
    /**
     * 序号
     */
    private int code;
    
    /**
     * 英文全称
     */
    private String fullNameEn;
    
    /**
     * 中文
     */
    private String nameCn;
    

    private WeekNameEnum(int code, String fullNameEn, String nameCn) {
        this.code = code;
        this.fullNameEn = fullNameEn;
        this.nameCn = nameCn;
    }

    /**
     * 根据code查询星期名称枚举
     * @param code
     * @return
     */
    public static WeekNameEnum getByCode(int code){
        if(code >=1 && code <= 12){
            for(WeekNameEnum monthNameEnum : WeekNameEnum.values()){
                if(monthNameEnum.getCode() == code){
                    return monthNameEnum;
                }
            }
        }
        return null;
    }
    
    /**
     * 根据code查询星期英文简称
     * @param code
     * @return
     */
    public static String getShortNameEnByCode(int code){
        WeekNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.name() : null;
    }
    
    /**
     * 根据code查询星期英文全称
     * @param code
     * @return
     */
    public static String getFullNameEnByCode(int code){
        WeekNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.getFullNameEn() : null;
    }
    
    /**
     * 根据code查询星期中文名称
     * @param code
     * @return
     */
    public static String getNameCnByCode(int code){
        WeekNameEnum monthNameEnum = getByCode(code);
        return monthNameEnum != null ? monthNameEnum.getNameCn() : null;
    }

    public int getCode() {
        return code;
    }

    public String getFullNameEn() {
        return fullNameEn;
    }

    public String getNameCn() {
        return nameCn;
    }


}

应用代码:

    /**
     * 获取星期值 1-7,星期一到星期日
     * @param date
     * @return
     */
    public static int getDayOfWeek(Date date){
        return DateTimeConverterUtil.toLocalDateTime(date).getDayOfWeek().getValue();
    }
    
    /**
     * 获取星期值 1-7,星期一到星期日
     * @param localDateTime
     * @return
     */
    public static int getDayOfWeek(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return localDateTime.getDayOfWeek().getValue();
    }
    
    /**
     * 获取星期值 1-7,星期一到星期日
     * @param localDate
     * @return
     */
    public static int getDayOfWeek(LocalDate localDate){
        Objects.requireNonNull(localDate, "localDate");
        return localDate.getDayOfWeek().getValue();
    }    
    
    /**
     * 获取星期值 1-7,星期一到星期日
     * @param instant
     * @return
     */
    public static int getDayOfWeek(Instant instant){
        return DateTimeConverterUtil.toLocalDateTime(instant).getDayOfWeek().getValue();
    }
    
    /**
     * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday
     * @param date
     * @return
     */
    public static String getDayOfWeekEnLong(Date date){
        return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(date));
    }
    
    /**
     * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday
     * @param localDateTime
     * @return
     */
    public static String getDayOfWeekEnLong(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(localDateTime));
    }
    
    /**
     * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday
     * @param localDate
     * @return
     */
    public static String getDayOfWeekEnLong(LocalDate localDate){
        Objects.requireNonNull(localDate, "localDate");
        return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(localDate));
    }    
    
    /**
     * 获取星期英文全称,比如Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday
     * @param instant
     * @return
     */
    public static String getDayOfWeekEnLong(Instant instant){
        return WeekNameEnum.getFullNameEnByCode(getDayOfWeek(instant));
    }
    
    /**
     * 获取星期英文简称,比如Mon
     * @param date
     * @return
     */
    public static String getDayOfWeekEnShort(Date date){
        return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(date));
    }
    
    /**
     * 获取星期英文简称,比如Mon
     * @param localDateTime
     * @return
     */
    public static String getDayOfWeekEnShort(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDateTime));
    }
    
    /**
     * 获取星期英文简称,比如Mon
     * @param localDate
     * @return
     */
    public static String getDayOfWeekEnShort(LocalDate localDate){
        Objects.requireNonNull(localDate, "localDate");
        return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(localDate));
    }    
    
    /**
     * 获取星期英文简称,比如Mon
     * @param instant
     * @return
     */
    public static String getDayOfWeekEnShort(Instant instant){
        return WeekNameEnum.getShortNameEnByCode(getDayOfWeek(instant));
    }    
    
    
    /**
     * 获取星期中文,比如星期一
     * @param date
     * @return
     */
    public static String getDayOfWeekCn(Date date){
        return WeekNameEnum.getNameCnByCode(getDayOfWeek(date));
    }
    
    /**
     * 获取星期中文,比如星期一
     * @param localDateTime
     * @return
     */
    public static String getDayOfWeekCn(LocalDateTime localDateTime){
        Objects.requireNonNull(localDateTime, "localDateTime");
        return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDateTime));
    }
    
    /**
     * 获取星期中文,比如星期一
     * @param localDate
     * @return
     */
    public static String getDayOfWeekCn(LocalDate localDate){
        Objects.requireNonNull(localDate, "localDate");
        return WeekNameEnum.getNameCnByCode(getDayOfWeek(localDate));
    }    
    
    /**
     * 获取星期中文,比如星期一
     * @param instant
     * @return
     */
    public static String getDayOfWeekCn(Instant instant){
        return WeekNameEnum.getNameCnByCode(getDayOfWeek(instant));
    }

测试代码:

    /**
     * 获取星期信息,包括英文全称简称,中文等
     */
    @Test
    public void dateGetWeekTest(){
        Date date = new Date();
        System.out.println(date);
        
        System.out.println(DateTimeCalculatorUtil.getDayOfWeek(date));
        System.out.println(DateTimeCalculatorUtil.getDayOfWeekEnLong(date));
        System.out.println(DateTimeCalculatorUtil.getDayOfWeekEnShort(date));
        System.out.println(DateTimeCalculatorUtil.getDayOfWeekCn(date));
    }

输出:

Thu Feb 27 16:09:00 CST 2020
4
Thursday
Thu
星期四

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

猜你喜欢

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