packagecom.xkzhangsan.time.enums;importjava.time.LocalTime;importjava.util.Date;importjava.util.Objects;importcom.xkzhangsan.time.constants.Constant;importcom.xkzhangsan.time.converter.DateTimeConverterUtil;/*** 十二时辰枚举,包含英文全称,中文全称,时间范围
*
*@authorxkzhangsan
* @date 2020年08-01*/
public enumTwelveTwoEnum {
ZISHI(1, "子时", "23:00:00", "01:00:00"),
CHOUSHI(2, "丑时", "01:00:00", "03:00:00"),
YINSHI(3, "寅时", "03:00:00", "05:00:00"),
MAOSHI(4, "卯辰", "05:00:00", "07:00:00"),
CHENSHI(5, "辰时", "07:00:00", "09:00:00"),
SISHI(6, "巳时", "09:00:00", "11:00:00"),
WUSHI(7, "午时", "11:00:00", "13:00:00"),
WEISHI(8, "未时", "13:00:00", "15:00:00"),
SHENSHI(9, "申时", "15:00:00", "17:00:00"),
YOUSHI(10, "酉时", "17:00:00", "19:00:00"),
XUSHI(11, "戌时", "19:00:00", "21:00:00"),
HAISHI(12, "亥时", "21:00:00", "23:00:00"),;/*** 序号*/
private intcode;/*** 中文名称*/
privateString nameCn;/*** 开始时间*/
privateString startTime;/*** 结束时间*/
privateString endTime;private TwelveTwoEnum(intcode, String nameCn, String startTime, String endTime) {this.code =code;this.nameCn =nameCn;this.startTime =startTime;this.endTime =endTime;
}/*** 根据时间查询时辰名称枚举
*@paramlocalTime
*@returnTwelveHoursEnum*/
public staticTwelveTwoEnum getTwelveHoursEnum(LocalTime localTime){
Objects.requireNonNull(localTime,"localTime");for(TwelveTwoEnum twelveHours : TwelveTwoEnum.values()){
LocalTime timeStart=LocalTime.parse(twelveHours.getStartTime());
LocalTime timeEnd=LocalTime.parse(twelveHours.getEndTime());//子时,特殊计算
if(isZiShi(localTime, timeStart, timeEnd)){returnTwelveTwoEnum.ZISHI;
}if(isBetween(localTime, timeStart, timeEnd)) {returntwelveHours;
}
}return null;
}/*** 时间区间判断
*@paramlocalTime
*@paramtimeStart
*@paramtimeEnd
*@return在区间 true,不在 false*/
private static booleanisBetween(LocalTime localTime, LocalTime timeStart, LocalTime timeEnd) {return localTime.equals(timeStart) || (localTime.isAfter(timeStart) &&localTime.isBefore(timeEnd));
}/*** 是否子时
*@paramlocalTime
*@paramtimeStart
*@paramtimeEnd
*@return是 true, 否 false*/
private static booleanisZiShi(LocalTime localTime, LocalTime timeStart, LocalTime timeEnd) {//23点,0点
if(Constant.TWENTYTHREECLOCK.equals(localTime) ||LocalTime.MIDNIGHT.equals(localTime)){return true;
}//23-0点
if(localTime.isAfter(Constant.TWENTYTHREECLOCK) &&localTime.isBefore(LocalTime.MIDNIGHT)){return true;
}//0-1点
if(localTime.isAfter(LocalTime.MIDNIGHT) &&localTime.isBefore(Constant.ONECLOCK)){return true;
}return false;
}/*** 根据时间查询时辰名称
*@paramlocalTime
*@returnString*/
public staticString getNameCn(LocalTime localTime){
TwelveTwoEnum twelveHours=getTwelveHoursEnum(localTime);return twelveHours != null ? twelveHours.getNameCn() : null;
}/*** 根据时间查询时辰名称
*@paramdate
*@returnString*/
public staticString getNameCn(Date date){returngetNameCn(DateTimeConverterUtil.toLocalTime(date));
}public intgetCode() {returncode;
}publicString getNameCn() {returnnameCn;
}publicString getStartTime() {returnstartTime;
}publicString getEndTime() {returnendTime;
}
}