Java日期时间API系列25Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。
1.十二星座名称枚举
package com.xkzhangsan.time.enums;importstatic 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
*/publicenum 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"),;
/**
* 序号
*/
privateint 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
*/
publicstatic 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;
}
}
returnnull;
}
/**
* 根据日期查询星座中文名称
* @param monthDayStr MM-dd格式
* @return
*/
publicstatic String getNameCnByMonthDay(String monthDayStr){
ConstellationNameEnum constellationNameEnum = getConstellationNameEnumByMonthDay(monthDayStr);
return constellationNameEnum != null ? constellationNameEnum.getNameCn() : null;
}
/**
* 根据日期查询星座英文名称
* @param monthDayStr MM-dd格式
* @return
*/
publicstatic String getNameEnByMonthDay(String monthDayStr){
ConstellationNameEnum constellationNameEnum = getConstellationNameEnumByMonthDay(monthDayStr);
return constellationNameEnum != null ? constellationNameEnum.name() : null;
}
publicint 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*/
publicstatic String getConstellationNameCn(String monthDayStr){
return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr);
}
/**
* 根据日期查询星座中文名称
* @param date
* @return
*/
publicstatic String getConstellationNameCn(Date date){
String monthDayStr = DateTimeFormatterUtil.format(date, DateTimeFormatterUtil.MM_DD_FMT);
return ConstellationNameEnum.getNameCnByMonthDay(monthDayStr);
}
/**
* 根据日期查询星座英文名称
* @param monthDayStr MM-dd格式
* @return
*/
publicstatic String getConstellationNameEn(String monthDayStr){
return ConstellationNameEnum.getNameEnByMonthDay(monthDayStr);
}
测试代码:
/*** 星座计算测试
*/@Test
publicvoid 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
以上是 Java日期时间API系列25Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。 的全部内容, 来源链接: utcz.com/z/513972.html