All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.time.DateTimeMonth Maven / Gradle / Ivy

package com.moon.core.time;

import com.moon.core.enums.EnumDescriptor;
import com.moon.core.lang.StringUtil;

import java.time.DateTimeException;
import java.time.Month;
import java.time.Year;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalField;
import java.util.Calendar;

/**
 * @author benshaoye
 * @see Month
 * @see java.util.Calendar
 * @see java.util.Calendar#JANUARY
 */
public enum DateTimeMonth implements TemporalAccessor, TemporalAdjuster, EnumDescriptor {
    /**
     * 一月
     */
    JANUARY(Calendar.JANUARY, "一月"),


    FEBRUARY(Calendar.FEBRUARY, "二月"),


    MARCH(Calendar.MARCH, "三月"),


    APRIL(Calendar.APRIL, "四月"),


    MAY(Calendar.MAY, "五月"),


    JUNE(Calendar.JUNE, "六月"),


    JULY(Calendar.JULY, "七月"),


    AUGUST(Calendar.AUGUST, "八月"),


    SEPTEMBER(Calendar.SEPTEMBER, "九月"),


    OCTOBER(Calendar.OCTOBER, "十月"),


    NOVEMBER(Calendar.NOVEMBER, "十一月"),


    DECEMBER(Calendar.DECEMBER, "十二月");

    private final static DateTimeMonth[] MONTHS = values();

    private final int calendarValue;
    private final Month month;
    private final String ChineseText;

    DateTimeMonth(int month, String ChineseText) {
        this.ChineseText = ChineseText;
        this.calendarValue = month;
        this.month = Month.of(getValue());
    }

    /**
     * 获取季节
     *
     * @return 季节
     */
    public Season toSeason() { return Season.ofMonth(getValue()); }

    /**
     * 获取月份
     *
     * @return 月份
     */
    public Month getMonth() { return month; }

    /**
     * 获取月份值
     *
     * @return 月份值
     */
    public int getValue() { return ordinal() + 1; }

    /**
     * 中文名称
     *
     * @return
     */
    public String getChineseText() { return ChineseText; }

    /**
     * 短中文名称
     *
     * @return
     */
    public String getChineseShortText() { return month + "月"; }

    /**
     * 英文名称
     *
     * @return
     */
    public String getEnglishText() { return StringUtil.capitalize(name().toLowerCase()); }

    /**
     * 短名称,英文前三位
     *
     * @return
     */
    public String getEnglishShortText() { return name().substring(0, 3); }

    public static DateTimeMonth of(int month) {
        if (month < 1 || month > 12) {
            throw new DateTimeException("Invalid value for MonthOfYear: " + month);
        }
        return MONTHS[month - 1];
    }

    /**
     * 返回当月最后一天
     *
     * @param year 年份,用以区别是否闰年
     *
     * @return 当月最后一天
     *
     * @see Month#length(boolean)
     */
    public int getLastDayOfMonth(int year) {
        return getMonth().length(Year.isLeap(year));
    }

    /**
     * 返回指定年份的当月第一天是指定年份的第 N 天
     *
     * @param year 年份
     *
     * @return 当月第一天是给定年份的第 N 天
     */
    public int getFirstDayOfYear(int year) {
        return getMonth().firstDayOfYear(Year.isLeap(year));
    }

    /**
     * 返回指定年份的当月最后一天是指定年份的第 N 天
     *
     * @param year 年份
     *
     * @return 当月最后一天是给定年份的第 N 天
     */
    public int getLastDayOfYear(int year) {
        Month month = getMonth();
        boolean isLeap = Year.isLeap(year);
        return month.firstDayOfYear(isLeap) + month.length(isLeap);
    }

    /**
     * copied from {@link Month}
     *
     * @param field TemporalField
     *
     * @return true|false
     */
    @Override
    public boolean isSupported(TemporalField field) {
        return getMonth().isSupported(field);
    }

    /**
     * copied from {@link Month}
     *
     * @param field TemporalField
     *
     * @return long value
     */
    @Override
    public long getLong(TemporalField field) {
        return getMonth().getLong(field);
    }

    /**
     * copied from {@link Month}
     *
     * @param temporal Temporal
     *
     * @return Temporal
     */
    @Override
    public Temporal adjustInto(Temporal temporal) {
        return getMonth().adjustInto(temporal);
    }

    @Override
    public String getText() { return name(); }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy