通过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
来源:oschina
链接:https://my.oschina.net/xkzhangsan/blog/3179606