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

Java日期时间API系列25-----Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。的更多相关文章

  1. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  2. API接口自动化之3 同一个war包中多个接口做自动化测试

    同一个war包中多个接口做自动化测试 一个接口用一个测试类,每个测试用例如下,比如下面是4个测试用例,每个详细的测试用例中含有请求入参,返回体校验,以此来判断每条测试用例是否通过 一个war包中,若含 ...

  3. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  4. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  5. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  6. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  7. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  8. Java8系列 (六) 新的日期和时间API

    概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...

  9. Java8 新的日期和时间API(笔记)

    LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...

  10. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

随机推荐

  1. Bulk RNA-seq 基本分析流程

    目的: 对illumina数据进行处理,利用 RNA-Seq 发现新的 RNA 变体和剪接位点,或量化 mRNA 以进行基因表达分析等.对两组或多组样本的转录组数据,通过差异表达分析和对所发现的差异表 ...

  2. 【Forza Horizon 5】频繁断网解决办法

    参考自文章: https://www.acfun.cn/a/ac32056183_2 简而言之就是玩地平线5的时候不要挂着腾讯的QQ.TIM.微信

  3. 【Dos-BatchPrograming】04

    --1.PING 主机联通性检测 Microsoft Windows [版本 10.0.19041.746] (c) 2020 Microsoft Corporation. 保留所有权利. C:\Us ...

  4. 【Mybatis-Plus】Spring整合 驼峰命名设置失效问题

    查询时发现这个问题: DEBUG [main] - Creating a new SqlSession DEBUG [main] - SqlSession [org.apache.ibatis.ses ...

  5. 国产显卡如何正确打开 —— Windows平台下使用驱动精灵为国产显卡更新驱动(兆芯平台)

    买了一个国产的电脑,全国产,CPU慢些也就忍了,软件兼容性差.稳定性差也忍了,大不了就用来上网看电影嘛,关键问题是这个国产显卡放电影居然有些卡,播放电影的时候存在明显的卡顿感,这简直是把国产电脑在我脑 ...

  6. 高级工程师面试大全- spring篇

    1.spring是什么 Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.主要包括以下七 ...

  7. 2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组中的最小元素。 你的目标是通过这些操作,使得数组中的所有元素都大于或等于k。 请计算出实现这个目

    2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组中的最小元素. 你的目标是通过这些操作,使得数组中的所有元素都大于或等于k. 请计算出实现这个目 ...

  8. AvaloniaChat-v0.0.2:兼容智谱AI 快速使用指南

    智谱AI介绍 北京智谱华章科技有限公司(简称"智谱AI")致力于打造新一代认知智能大模型,专注于做大模型的中国创新.公司合作研发了中英双语千亿级超大规模预训练模型GLM-130B, ...

  9. wiz 为知笔记服务器 docker 迁移爬坑指北

    本文主要是介绍 wiz 为知笔记服务器 docker 从旧服务器迁移到新服务器的步骤以及问题排查. 旧服务器升级 wiz docker 目的:保持和新服务器拉取的镜像版本一致. 官方只留了 wiz d ...

  10. 推荐2款实用的持续集成与部署(CI&CD)自动化工具

    前言 最近DotNetGuide技术社区交流群有不少同学在咨询:持续集成与部署(CI&CD)自动化工具有什么好用的推荐?今天大姚给大家推荐2款实用且免费的持续集成与部署(CI&CD)自 ...