zoukankan      html  css  js  c++  java
  • Java日期时间API系列25-----Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。

      通过Java日期时间API系列24-----Jdk8中java.time包中的新的日期时间API类,MonthDay类源码和应用,对比相同月日时间。对MonthDay简单做了说明和应用。十二星座是根据公历生日类计算属于哪个星座(白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双鱼座)。

    1.十二星座名称枚举

    package com.xkzhangsan.time.enums;
    
    import static com.xkzhangsan.time.constants.Constant.MONTHDAY_FORMAT_PRE;
    
    import java.time.MonthDay;
    import java.util.Objects;
    
    /**
     * 星座名称枚举,包含英文全称,中文全称,时间范围
     * 
     * @ClassName: ConstellationNameEnum
     * @Description: ConstellationNameEnum
     * @author xkzhangsan
     * @date 2020年02-29
     */
    public enum ConstellationNameEnum {
        
        Aries(1, "白羊座", "03-21", "04-19"),
        Taurus(2, "金牛座", "04-20", "05-20"),
        Gemini(3, "双子座", "05-21", "06-21"),
        Cancer(4, "巨蟹座", "06-22", "07-22"),
        Leo(5, "狮子座", "07-23", "08-22"),
        Virgo(6, "处女座", "08-23", "09-22"),
        Libra(7, "天秤座", "09-23", "10-23"), 
        Scorpio(8, "天蝎座", "10-24", "11-22"),
        Sagittarius(9, "射手座", "11-23", "12-21"),
        Capricorn(10, "摩羯座", "12-22", "01-19"),
        Aquarius(11, "水瓶座", "01-20", "02-18"),
        Pisces(12, "双鱼座", "02-19", "03-20"),;
        
        /**
         * 序号
         */
        private int code;
        
        /**
         * 中文名称
         */
        private String nameCn;
        
        /**
         * 开始时间
         */
        private String startDate;
        
        /**
         * 结束时间
         */
        private String endDate;
    
        
    
        private ConstellationNameEnum(int code, String nameCn, String startDate, String endDate) {
            this.code = code;
            this.nameCn = nameCn;
            this.startDate = startDate;
            this.endDate = endDate;
        }
        
        /**
         * 根据日期查询星座名称枚举
         * @param monthDayStr MM-dd格式
         * @return
         */
        public static ConstellationNameEnum getConstellationNameEnumByMonthDay(String monthDayStr){
            Objects.requireNonNull(monthDayStr, "monthDayStr");
            MonthDay monthDay = MonthDay.parse(MONTHDAY_FORMAT_PRE + monthDayStr);
            for(ConstellationNameEnum constellationNameEnum : ConstellationNameEnum.values()){
                MonthDay monthDayStart = MonthDay.parse(MONTHDAY_FORMAT_PRE + constellationNameEnum.getStartDate());
                MonthDay monthDayEnd = MonthDay.parse(MONTHDAY_FORMAT_PRE + constellationNameEnum.getEndDate());
                if (monthDay.equals(monthDayStart) || monthDay.equals(monthDayEnd)
                        || (monthDay.isAfter(monthDayStart) && monthDay.isBefore(monthDayEnd))) {
                    return constellationNameEnum;
                }
            }
            return null;
        }
    
        /**
         * 根据日期查询星座中文名称
         * @param monthDayStr MM-dd格式
         * @return
         */
        public static String getNameCnByMonthDay(String monthDayStr){
            ConstellationNameEnum constellationNameEnum = getConstellationNameEnumByMonthDay(monthDayStr);
            return constellationNameEnum != null ? constellationNameEnum.getNameCn() : null;
        }
        
        /**
         * 根据日期查询星座英文名称
         * @param monthDayStr MM-dd格式
         * @return
         */
        public static String getNameEnByMonthDay(String monthDayStr){
            ConstellationNameEnum constellationNameEnum = getConstellationNameEnumByMonthDay(monthDayStr);
            return constellationNameEnum != null ? constellationNameEnum.name() : null;
        }
        
    
        public int getCode() {
            return code;
        }
    
        public String getNameCn() {
            return nameCn;
        }
    
        public String getStartDate() {
            return startDate;
        }
    
        public String getEndDate() {
            return endDate;
        }
    
    }

    主要的方法为:public static ConstellationNameEnum getConstellationNameEnumByMonthDay(String monthDayStr),通过对输入的月日字符串和枚举中的起始时间对比得出星座。

    星座名称和时间范围来自百度百科

    2. 应用

        /**
         * 根据日期查询星座中文名称
         * @param monthDayStr MM-dd格式
         * @return
         */
        public static String getConstellationNameCn(String monthDayStr){
            return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr);
        }
        
        /**
         * 根据日期查询星座中文名称
         * @param date
         * @return
         */
        public static String getConstellationNameCn(Date date){
            String monthDayStr = DateTimeFormatterUtil.format(date, DateTimeFormatterUtil.MM_DD_FMT);
            return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr);
        }
        
        /**
         * 根据日期查询星座英文名称
         * @param monthDayStr MM-dd格式
         * @return
         */
        public static String getConstellationNameEn(String monthDayStr){
            return ConstellationNameEnum.getNameEnByMonthDay(monthDayStr);
        }    

    测试代码:

        /**
         * 星座计算测试
         */
        @Test
        public void constellationTest(){
            System.out.println(DateTimeCalculatorUtil.getConstellationNameCn("02-29"));
            System.out.println(DateTimeCalculatorUtil.getConstellationNameEn("02-29"));
            
            //2020-05-01 的星座
            System.out.println(DateTimeCalculatorUtil.getConstellationNameCn(DateTimeCalculatorUtil.getDate(2020, 5, 1)));
        }

    输出:

    双鱼座
    Pisces
    金牛座

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

  • 相关阅读:
    linux基础学习2
    linux下部署项目问题
    ThinkPHP上传返回 “文件上传保存错误!”
    jQuery自定义插件
    对于nginx为什么能提高性能
    WebSocket 是什么原理?为什么可以实现持久连接?
    数据库的左右外连接
    漫画说算法--动态规划算法一(绝对通俗易懂,非常棒)
    Integer.MIN_VALUE
    反射
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/12384296.html
Copyright © 2011-2022 走看看