Java日期时间API系列25

Wesley13
• 阅读 875

  通过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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java日期时间API系列20
  Java日期时间API系列19Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnbl
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
Java日期时间API系列19
  通过Java日期时间API系列6Jdk8中java.time包中的新的日期时间API类(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12052195.html)中时间范围示意图:可以很清晰的看出Zo
Wesley13 Wesley13
3年前
Java日期时间API系列34
  通过Java日期时间API系列9Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12110137.html)
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
Java日期时间API系列35
  通过Java日期时间API系列1Jdk7及以前的日期时间类(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12032719.html)中得知,Java8以前除了java.sql.Timestamp扩充
Wesley13 Wesley13
3年前
Java日期时间API系列33
  从Java日期时间API系列10Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12113489.html)中