zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ssh scp命令详解
    python模块与包
    python参数Sample Code
    python 多线程简介
    python virtualenv环境安装(ubuntu)
    python pip 代理设置
    mysql资源总结
    mysql索引原理及用法
    Oracle学习笔记:利用user_segments查表的大小
    Oracle学习笔记:dba_tables、all_tables、user_tables区别
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/12372685.html
Copyright © 2011-2022 走看看