点击加群 7866820

前言

Tyme是一个非常强大的日历工具库,可以看作Lunar的升级版,拥有更优的设计和更强的扩展性,支持公历和农历、星座、干支、生肖、节气、法定假日等。生成如下的月历,您只需要写极少的代码:

示例加载中,请稍候...

开源地址:

  1. java:https://github.com/6tail/tyme4j
  2. typescript:https://github.com/6tail/tyme4ts
  3. php:https://github.com/6tail/tyme4php

您可以通过以下两种方式获得感兴趣的内容:

几乎所有的类型,都可以调用以下几个方法:

1. 名称

调用getName()返回名称字符串。

        // 农历年名称
        LunarYear lunarYear = LunarYear.fromYear(2023);
        // 农历癸卯年(依据国家标准《农历的编算和颁行》GB/T 33661-2017,农历年有2种命名方法:干支纪年法和生肖纪年法,这里默认采用干支纪年法。)
        String name = lunarYear.getName();
      

2. 完整描述

调用toString()返回完整描述字符串。

        // 农历月
        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        // 正月
        String monthName = lunarMonth.getName();
        // 农历癸卯年正月
        String monthString = lunarMonth.toString();
      

3. 推移

调用next(n)推移指定的步数,参数正数顺推,负数逆推。例如农历年推移,则代表推移多少年;农历时辰推移,则代表推移多少个时辰。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        // 得到5个月后的农历月
        LunarMonth lunarMonth2 = lunarMonth.next(5);
      

也有很多支持轮回的类型(以轮回标注),例如天干(10个为一轮)、地支(12个为一轮)、干支(60个为一轮)、星期(7个为一轮)等,可以通过索引值或名称进行初始化:

1. 通过索引值进行初始化

调用fromIndex(index)得到其对象。index为数字,从0开始,当索引值越界时,会自动轮回偏移。

        // 日
        Week week = Week.fromIndex(0);

        // 六
        week = Week.fromIndex(-1);

        // 乙丑
        SixtyCycle sixtyCycle = SixtyCycle.fromIndex(1);
      

2. 通过名称进行初始化

调用fromName(name)得到其对象。name为字符串,当名称不存在时,会抛出参数异常。

        // 日
        Week week = Week.fromName("日");

        // 六
        week = Week.fromName("六");

        // 乙丑
        SixtyCycle sixtyCycle = SixtyCycle.fromName("乙丑");
      

农历年 LunarYear

依据国家标准《农历的编算和颁行》GB/T 33661-2017,农历年以正月初一开始,至除夕结束。

如何得到农历年?

1. 从年初始化

参数为农历年,支持从-1到9999年。

        LunarYear lunarYear = LunarYear.fromYear(2023);
      

2. 从农历月 LunarMonth得到农历年

        // 农历2023年正月
        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        LunarYear lunarYear = lunarMonth.getYear();
      

从农历年可以得到些什么?

1. 年

返回为农历年数字,范围为-1到9999。

        LunarYear lunarYear = LunarYear.fromYear(2023);
        // 得到2023
        int year = lunarYear.getYear();
      

2. 当年的总天数

返回为数字,从正月初一到除夕的总天数。

        LunarYear lunarYear = LunarYear.fromYear(2023);
        int dayCount = lunarYear.getDayCount();
      

3. 当年的闰月月份

返回为数字,代表当年的闰月月份,例如:5代表闰五月,0代表当年没有闰月。

        LunarYear lunarYear = LunarYear.fromYear(2023);
        int leapMonth = lunarYear.getLeapMonth();
      

4. 当年的干支

返回为干支 SixtyCycle

        LunarYear lunarYear = LunarYear.fromYear(2023);
        SixtyCycle sixtyCycle = lunarYear.getSixtyCycle();
      

5. 运

返回为运 Twenty

        LunarYear lunarYear = LunarYear.fromYear(2023);
        Twenty twenty = lunarYear.getTwenty();
      

6. 九星

返回为九星 NineStar

        LunarYear lunarYear = LunarYear.fromYear(2023);
        NineStar nineStar = lunarYear.getNineStar();
      

7. 太岁方位

返回为方位 Direction

        LunarYear lunarYear = LunarYear.fromYear(2023);
        Direction direction = lunarYear.getJupiterDirection();
      

8. 农历月列表

返回为农历月 LunarMonth的列表,从正月到十二月,包含闰月。

        LunarYear lunarYear = LunarYear.fromYear(2023);
        List<LunarMonth> months = lunarYear.getMonths();
      

农历季节 LunarSeason

从正月开始,依次为:孟春、仲春、季春、孟夏、仲夏、季夏、孟秋、仲秋、季秋、孟冬、仲冬、季冬。

如何得到农历季节?

1. 从农历月 LunarMonth得到

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        LunarSeason season = lunarMonth.getSeason();
      

农历月 LunarMonth

农历月以初一开始,大月30天,小月29天。

如何得到农历月?

1. 从农历年、月初始化

参数农历年,支持从-1到9999年;参数农历月,支持1到12,如果为闰月的,使用负数,即-3代表闰三月。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 5);
      

2. 从农历日 LunarDay得到农历月

        // 农历2023年正月初一
        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        LunarMonth lunarMonth = lunarDay.getMonth();
      

从农历月可以得到些什么?

1. 农历年

返回为农历年 LunarYear

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        LunarYear lunarYear = lunarMonth.getYear();
      

2. 月

返回为月份数字,范围为1到12,如闰七月也返回7。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        // 得到1
        int month = lunarMonth.getMonth();
      

3. 月(支持闰月)

返回为月份数字,范围为1到12,闰月为负数,如闰7月返回-7。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        // 得到1
        int month = lunarMonth.getMonthWithLeap();
      

4. 是否闰月

返回为布尔值,闰月返回true,非闰月返回false。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        // 得到false
        boolean leap = lunarMonth.isLeap();
      

5. 位于当年的月索引

返回为数字,范围0到12,正月为0,依次类推,例如五月索引值为4,闰五月索引值为5。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        int index = lunarMonth.getIndexInYear();
      

6. 当月的总天数

返回为数字,从初一开始的总天数,大月有30天,小月有29天。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        int dayCount = lunarMonth.getDayCount();
      

7. 农历季节

返回为农历季节 LunarSeason

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        LunarSeason season = lunarMonth.getSeason();
      

8. 初一的儒略日

返回为儒略日 Julianday

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        Julianday julianday = lunarMonth.getFirstJulianDay();
      

9. 当月有几周

参数为起始星期,1234560分别代表星期一至星期天,返回为数字。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        int weekCount = lunarMonth.getWeekCount(1);
      

10. 当月的周列表

参数为起始星期,1234560分别代表星期一至星期天,返回为农历周 LunarWeek的列表。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        List<LunarWeek> weeks = lunarMonth.getWeeks(1);
      

11. 当月的干支

返回为干支 SixtyCycle

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        SixtyCycle sixtyCycle = lunarMonth.getSixtyCycle();
      

12. 九星

返回为九星 NineStar

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        NineStar nineStar = lunarMonth.getNineStar();
      

13. 太岁方位

返回为方位 Direction

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        Direction direction = lunarMonth.getJupiterDirection();
      

14. 农历日列表

返回为农历日 LunarDay的列表,从初一开始。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        List<LunarDay> days = lunarMonth.getDays();
      

15. 逐月胎神

返回为逐月胎神 FetusMonth。闰月无胎神。

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        FetusMonth fetus = lunarMonth.getFetus();
      

农历周 LunarWeek

农历一个月最多有6个周,分别为:第一周、第二周、第三周、第四周、第五周、第六周。

如何得到农历周?

1. 通过农历年月的周索引初始化,参数分别为农历年、农历月、周索引、起始星期(1234560分别代表星期一至星期日)

        // 农历癸卯年正月第一周,以星期2为一周的开始
        LunarWeek lunarWeek = LunarWeek.fromYm(2023, 1, 0, 2);
      

从农历周可以得到些什么?

1. 本周第一天的农历日

返回为农历日 LunarDay

        LunarWeek lunarWeek = LunarWeek.fromYm(2023, 1, 0, 2);
         
        // 农历壬寅年十二月廿六
        LunarDay lunarDay = lunarWeek.getFirstDay();
      

2. 本周农历日列表

返回为农历日 LunarDay的列表。

        LunarWeek lunarWeek = LunarWeek.fromYm(2023, 1, 0, 2);
        List<LunarDay> days = lunarWeek.getDays();
      

农历日 LunarDay

如何得到农历日?

1. 从农历年、月、日初始化

参数农历年,支持从-1到9999年;参数农历月,支持1到12,如果为闰月的,使用负数,即-3代表闰三月;参数农历日,支持1到30,大月30天,小月29天。

        // 农历2023年正月初一
        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
      

2. 从农历时辰 LunarHour得到农历日

        // 农历2023年正月初一 13:00:00
        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        LunarDay lunarDay = lunarHour.getDay();
      

3. 从公历日 SolarDay转农历日

        // 公历2024年2月9日
        SolarDay solarDay = SolarDay.fromYmd(2024, 2, 9);
        // 农历癸卯年十二月三十
        LunarDay lunarDay = solarDay.getDay();
      

从农历日可以得到些什么?

1. 农历月 LunarMonth

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        // 正月
        LunarMonth lunarMonth = lunarDay.getMonth();
      

2. 日

返回为数字,范围1到30。

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        // 1
        int day = lunarDay.getDay();
      

3. 星期 Week

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        Week week = lunarDay.getWeek();
      

4. 当天的年干支

非当天所属的农历年干支,以立春换年。返回为干支 SixtyCycle

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        SixtyCycle sixtyCycle = lunarDay.getYearSixtyCycle();
      

5. 当天的月干支

非当天所属的农历月干支,以节令换月。返回为干支 SixtyCycle

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        SixtyCycle sixtyCycle = lunarDay.getMonthSixtyCycle();
      

6. 当天的干支

返回为干支 SixtyCycle

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        SixtyCycle sixtyCycle = lunarDay.getSixtyCycle();
      

7. 九星

返回为九星 NineStar

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        NineStar nineStar = lunarDay.getNineStar();
      

8. 太岁方位

返回为方位 Direction

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        Direction direction = lunarDay.getJupiterDirection();
      

9. 建除十二值神

返回为建除十二值神 Duty

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        Duty duty = lunarDay.getDuty();
      

10. 黄道黑道十二神

返回为黄道黑道十二神 TwelveStar

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        TwelveStar twelveStar = lunarDay.getTwelveStar();
      

11. 黄道黑道十二神

返回为黄道黑道十二神 TwelveStar

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        TwelveStar twelveStar = lunarDay.getTwelveStar();
      

12. 逐日胎神

返回为逐日胎神 FetusDay

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        FetusDay fetus = lunarDay.getFetusDay();
      

13. 月相

返回为月相 Phase

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        Phase phase = lunarDay.getPhase();
      

14. 二十八宿

返回为二十八宿 TwentyEightStar

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        TwentyEightStar twentyEightStar = lunarDay.getTwentyEightStar();
      

15. 农历传统节日

返回为农历传统节日 LunarFestival,当天无节日返回null。

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        LunarFestival festival = lunarDay.getFestival();
      

16. 农历日转公历日

返回为公历日 SolarDay

        LunarDay lunarDay = LunarDay.fromYmd(2023, 1, 1);
        SolarDay solarDay = lunarDay.getSolarDay();
      

17. 农历日前后比较

        // 农历2023年正月初一
        LunarDay a = LunarDay.fromYmd(2023, 1, 1);
        // // 农历2023年正月初二
        LunarDay b = LunarDay.fromYmd(2023, 1, 2);

        // a在b之前吗?这里返回true
        boolean aIsBeforeB = a.isBefore(b);
         
        // a在b之后吗?这里返回false
        boolean aIsAfterB = a.isAfter(b);
      

农历时辰 LunarHour

如何得到农历时辰?

1. 从农历年、月、日、时、分、秒初始化

参数农历年,支持从-1到9999年;参数农历月,支持1到12,如果为闰月的,使用负数,即-3代表闰三月;参数农历日,支持1到30,大月30天,小月29天;时为0-23;分为0-59;秒为0-59。

        // 农历2023年正月初一 13:00:00
        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
      

2. 从公历时刻 SolarTime转农历时辰

        // 公历2024年2月9日 13:00:00
        SolarTime solarTime = SolarTime.fromYmdHms(2024, 2, 9, 13, 0, 0);
        // 农历癸卯年十二月三十 未时
        LunarHour lunarHour = solarTime.getLunarHour();
      

从农历时辰可以得到些什么?

1. 农历日 LunarDay

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 初一
        LunarDay lunarDay = lunarHour.getDay();
      

2. 时

返回为数字,范围0到23。

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 13
        int hour = lunarHour.getHour();
      

3. 分

返回为数字,范围0到59。

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 0
        int minute = lunarHour.getMinute();
      

4. 秒

返回为数字,范围0到59。

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 0
        int second = lunarHour.getSecond();
      

4. 位于当天的序号

返回为数字,范围0到11。

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 7
        int index = lunarHour.getIndexInDay();
      

5. 当时的年干支

非当时所属的农历年干支,以立春具体时刻换年。返回为干支 SixtyCycle

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SixtyCycle sixtyCycle = lunarHour.getYearSixtyCycle();
      

5. 当时的月干支

非当天所属的农历月干支,以节令具体时刻换月。返回为干支 SixtyCycle

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SixtyCycle sixtyCycle = lunarHour.getMonthSixtyCycle();
      

6. 当时的日干支

返回为干支 SixtyCycle。注意:23:00开始算做第二天。

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SixtyCycle sixtyCycle = lunarHour.getDaySixtyCycle();
      

7. 时辰干支

返回为干支 SixtyCycle

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SixtyCycle sixtyCycle = lunarHour.getSixtyCycle();
      

8. 九星

返回为九星 NineStar

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        NineStar nineStar = lunarHour.getNineStar();
      

9. 农历时辰转公历时刻

返回为公历时刻 SolarTime

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SolarTime solarTime = lunarHour.getSolarTime();
      

10. 农历时辰转八字

返回为八字 EightChar

        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        EightChar eightChar = lunarHour.getEightChar();
      

11. 农历时辰前后比较

        // 农历2023年正月初一 13:00:00
        LunarHour a = LunarHour.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // // 农历2023年正月初二 09:00:00
        LunarHour b = LunarHour.fromYmdHms(2023, 1, 2, 09, 0, 0);

        // a在b之前吗?这里返回true
        boolean aIsBeforeB = a.isBefore(b);
         
        // a在b之后吗?这里返回false
        boolean aIsAfterB = a.isAfter(b);
      

生肖 Zodiac轮回

十二生效依次为:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪。

如何得到生肖?

1. 通过地支 EarthBranch得到

        // 鼠
        Zodiac zodiac = EarthBranch.fromName("子").getZodiac();
      

从生肖可以得到些什么?

1. 生肖转地支

返回为地支 EarthBranch

        Zodiac zodiac = Zodiac.fromName("牛");
         
        // 丑
        EarthBranch earthBranch = zodiac.getEarthBranch();
      

月相 Phase轮回

月相从农历初一开始,依次为:朔月、既朔月、蛾眉新月、蛾眉新月、蛾眉月、夕月、上弦月、上弦月、九夜月、宵月、宵月、宵月、渐盈凸月、小望月、望月、既望月、立待月、居待月、寝待月、更待月、渐亏凸月、下弦月、下弦月、有明月、有明月、蛾眉残月、蛾眉残月、残月、晓月、晦月。

如何得到月相?

1. 通过农历日 LunarDay得到

        // 朔月
        Phase phase = LunarDay.fromYmd(2000, 1, 1).getPhase();
      

公历年 SolarYear

如何得到公历年?

1. 从年初始化

参数为公历年,支持从1到9999年。

        SolarYear solarYear = SolarYear.fromYear(2024);
      

2. 从公历月 SolarMonth得到公历年

        // 公历2024年2月
        SolarMonth solarMonth = SolarMonth.fromYm(2024, 2);
        SolarYear solarYear = solarMonth.getYear();
      

从公历年可以得到些什么?

1. 年

返回为公历年数字,范围为1到9999。

        SolarYear solarYear = SolarYear.fromYear(2023);
        // 得到2023
        int year = solarYear.getYear();
      

2. 当年的总天数

返回为数字,从1月1日到12月31日的总天数。平年365天,闰年366天,1582年355天。

        SolarYear solarYear = SolarYear.fromYear(2023);
        // 365
        int dayCount = solarYear.getDayCount();
      

3. 当年是否闰年

返回为true/false。

        SolarYear solarYear = SolarYear.fromYear(2023);
        // false
        boolean leap = solarYear.isLeap();
      

4. 公历月列表

返回为公历月 SolarMonth的列表,从1月到12月。

        SolarYear solarYear = SolarYear.fromYear(2023);
        List<SolarMonth> months = solarYear.getMonths();
      

5. 公历半年列表

返回为公历半年 SolarHalfYear的列表,上半年和下半年。

        SolarYear solarYear = SolarYear.fromYear(2023);
        List<SolarHalfYear> halfYears = solarYear.getHalfYears();
      

6. 公历季度列表

返回为公历季度 SolarSeason的列表,一季度、二季度、三季度和四季度。

        SolarYear solarYear = SolarYear.fromYear(2023);
        List<SolarSeason> seasons = solarYear.getSeasons();
      

公历半年 SolarHalfYear

公历半年分为:上半年和下半年。

如何得到公历半年?

1. 从年初始化

参数为公历年和索引,支持从1到9999年,索引值为0或1,0代表上半年,1代表下半年。

        // 2024年上半年
        SolarHalfYear halfYear = SolarHalfYear.fromYear(2024, 0);
      

从公历半年可以得到些什么?

1. 年

返回为公历年数字,范围为1到9999。

        SolarHalfYear halfYear = SolarHalfYear.fromYear(2024, 0);
        // 得到2024
        int year = halfYear.getYear();
      

2. 索引

返回为数字,0代表上半年,1代表下半年。

        SolarHalfYear halfYear = SolarHalfYear.fromYear(2024, 0);
        // 0
        int index = halfYear.getIndex();
      

3. 公历月列表

返回为公历月 SolarMonth的列表,半年为6个月。

        SolarHalfYear halfYear = SolarHalfYear.fromYear(2024, 0);
        List<SolarMonth> months = halfYear.getMonths();
      

4. 公历季度列表

返回为公历季度 SolarSeason的列表,半年为2个季度。

        SolarHalfYear halfYear = SolarHalfYear.fromYear(2024, 0);
        List<SolarSeason> seasons = halfYear.getSeasons();
      

公历季度 SolarSeason

公历季度分为:一季度、二季度、三季度和四季度。

如何得到公历季度?

1. 从年初始化

参数为公历年和索引,支持从1到9999年,索引值为0-3,0代表一季度,3代表四季度。

        // 2024年上半年
        SolarSeason season = SolarSeason.fromYear(2024, 0);
      

2. 从公历月 SolarMonth得到

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        // 二季度
        SolarSeason season = solarMonth.getSeason();
      

从公历季度可以得到些什么?

1. 年

返回为公历年数字,范围为1到9999。

        SolarSeason season = SolarSeason.fromYear(2024, 0);
        // 得到2024
        int year = season.getYear();
      

2. 索引

返回为数字0-3,0代表一季度,3代表四季度。

        SolarSeason season = SolarSeason.fromYear(2024, 0);
        // 0
        int index = season.getIndex();
      

3. 公历月列表

返回为公历月 SolarMonth的列表,一季度为3个月。

        SolarSeason season = SolarSeason.fromYear(2024, 0);
        List<SolarMonth> months = season.getMonths();
      

公历月 SolarMonth

公历1年有12个月,为1月到12月。

如何得到公历月?

1. 从公历年、月初始化

参数公历年,支持从1到9999年;参数公历月,支持1到12。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
      

2. 从公历日 SolarDay得到公历月

        // 公历2023年1月1日
        SolarDay solarDay = Solar.fromYmd(2023, 1, 1);
        SolarMonth solarMonth = solarDay.getMonth();
      

从公历月可以得到些什么?

1. 公历年

返回为公历年 SolarYear

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        SolarYear solarYear = solarMonth.getYear();
      

2. 月

返回为月份数字,范围为1到12。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        // 5
        int month = solarMonth.getMonth();
      

3. 位于当年的月索引

返回为数字,范围0到11,0代表1月,11代表12月。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        // 4
        int index = solarMonth.getIndexInYear();
      

4. 当月的总天数

返回为数字,1582年10月只有21天,其余根据小学知识可知。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        int dayCount = solarMonth.getDayCount();
      

5. 公历季度

返回为公历季度 SolarSeason

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        // 二季度
        SolarSeason season = solarMonth.getSeason();
      

6. 当月有几周

参数为起始星期,1234560分别代表星期一至星期天,返回为数字。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        int weekCount = solarMonth.getWeekCount(1);
      

7. 当月的周列表

参数为起始星期,1234560分别代表星期一至星期天,返回为公历周 SolarWeek的列表。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        List<SolarWeek> weeks = solarMonth.getWeeks(1);
      

8. 公历日列表

返回为公历日 SolarDay的列表,从1日开始。

        SolarMonth solarMonth = SolarMonth.fromYm(2023, 5);
        List<SolarDay> days = solarMonth.getDays();
      

公历周 SolarWeek

公历一个月最多有6个周,分别为:第一周、第二周、第三周、第四周、第五周、第六周。

如何得到公历周?

1. 通过公历年月的周索引初始化,参数分别为公历年、公历月、周索引、起始星期(1234560分别代表星期一至星期日)

        // 2023年1月第一周,以星期2为一周的开始
        SolarWeek solarWeek = SolarWeek.fromYm(2023, 1, 0, 2);
      

从公历周可以得到些什么?

1. 本周第一天的公历日

返回为公历日 SolarDay

        SolarWeek solarWeek = SolarWeek.fromYm(2023, 1, 0, 2);
         
        // 2022年12月27日
        SolarDay solarDay = solarWeek.getFirstDay();
      

2. 本周公历日列表

返回为公历日 SolarDay的列表。

        SolarWeek solarWeek = SolarWeek.fromYm(2023, 1, 0, 2);
        List<SolarDay> days = solarWeek.getDays();
      

公历日 SolarDay

如何得到公历日?

1. 从公历年、月、日初始化

参数公历年,支持从1到9999年;参数公历月,支持1到12;参数公历日,支持1到31。

        // 公历2023年1月1日
        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
      

2. 从公历时刻 SolarTime得到公历日

        // 公历2023年1月1日 13:00:00
        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 0, 0);
        SolarDay solarDay = solarTime.getDay();
      

3. 从农历日 LunarDay转公历日

        // 农历癸卯年十二月三十
        LunarDay lunarDay = LunarDay.fromYmd(2023, 12, 30);
        // 公历2024年2月9日
        SolarDay solarDay = lunarDay.getDay();
      

4. 从儒略日 JulianDay转公历日

        JulianDay julianDay = JulianDay.fromJulianDay(2451545);
        // 公历2000年1月1日
        SolarDay solarDay = julianDay.getSolarDay();
      

从公历日可以得到些什么?

1. 公历月 SolarMonth

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        // 1月
        SolarMonth solarMonth = solarDay.getMonth();
      

2. 日

返回为数字,范围1到31。

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        // 1
        int day = solarDay.getDay();
      

3. 星期 Week

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        Week week = solarDay.getWeek();
      

4. 星座 Constellation

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        Constellation constellation = solarDay.getConstellation();
      

5. 当天所在的节气 SolarTerm

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        SolarTerm term = solarDay.getTerm();
      

6. 当天所在的七十二候 PhenologyDay

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        PhenologyDay phenologyDay = solarDay.getPhenologyDay();
      

7. 当天所在的三伏天 DogDay

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        DogDay dogDay = solarDay.getDogDay();
      

8. 当天所在的数九天 NineDay

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        NineDay nineDay = solarDay.getNineDay();
      

9. 位于当年的索引

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        int index = solarDay.getIndexInYear();
      

10. 公历现代节日

返回为公历现代节日 SolarFestival,当天无节日返回null。

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        // 元旦
        SolarFestival festival = solarDay.getFestival();
      

11. 法定假日

返回为法定假日 LegalHoliday,当天不是法定假日返回null。

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        LegalHoliday festival = solarDay.getLegalHoliday();
      

12. 公历日转农历日

返回为农历日 LunarDay

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        LunarDay lunarDay = solarDay.getLunarDay();
      

13. 公历日转儒略日

返回为儒略日 JulianDay

        SolarDay solarDay = SolarDay.fromYmd(2023, 1, 1);
        JulianDay julianDay = solarDay.getJulianDay();
      

14. 公历日前后比较

        SolarDay a = SolarDay.fromYmd(2023, 1, 1);
        SolarDay b = SolarDay.fromYmd(2023, 1, 2);

        // a在b之前吗?这里返回true
        boolean aIsBeforeB = a.isBefore(b);
         
        // a在b之后吗?这里返回false
        boolean aIsAfterB = a.isAfter(b);
      

15. 公历日相减

返回为两个公历日之间相差的天数。

        // -1
        int days = SolarDay.fromYmd(2023, 1, 1).subtract(SolarDay.fromYmd(2023, 1, 2));
      

公历时刻 SolarTime

如何得到公历时刻?

1. 从公历年、月、日、时、分、秒初始化

参数公历年,支持从1到9999年;参数公历月,支持1到12;参数公历日,支持1到31;时为0-23;分为0-59;秒为0-59。

        // 2023年1月1日 13:00:00
        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 0, 0);
      

2. 从农历时辰 LunarHour转公历时刻

        // 农历癸卯年十二月三十 未时
        LunarHour lunarHour = LunarHour.fromYmdHms(2023, 12, 30, 13, 0, 0);
        // 2024年2月9日 13:00:00
        SolarTime solarTime = lunarHour.getSolarTime();
      

3. 从儒略日 JulianDay转公历时刻

        JulianDay julianDay = JulianDay.fromJulianDay(2451545);
        // 公历2000年1月1日 12:00:00
        SolarTime solarTime = julianDay.getSolarTime();
      

从公历时刻可以得到些什么?

1. 公历日 SolarDay

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 2023年1月1日
        SolarDay solarDay = solarTime.getDay();
      

2. 时

返回为数字,范围0到23。

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 0, 0);
        // 13
        int hour = solarTime.getHour();
      

3. 分

返回为数字,范围0到59。

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 5, 0);
        // 5
        int minute = solarTime.getMinute();
      

4. 秒

返回为数字,范围0到59。

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 5, 20);
        // 20
        int second = solarTime.getSecond();
      

5. 当时所在的节气 SolarTerm

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 5, 20);
        SolarTerm term = solarTime.getTerm();
      

6. 公历时刻转农历时辰

返回为农历时辰 LunarHour

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 5, 20);
        LunarHour lunarHour = solarTime.getLunarHour();
      

7. 公历时刻转儒略日

返回为儒略日 JulianDay

        SolarTime solarTime = SolarTime.fromYmdHms(2023, 1, 1, 13, 5, 20);
        JulianDay julianDay = solarTime.getJulianDay();
      

8. 公历时刻前后比较

        SolarTime a = SolarTime.fromYmdHms(2023, 1, 1, 0, 0, 0);
        SolarTime b = SolarTime.fromYmdHms(2023, 1, 1, 1, 0, 0);

        // a在b之前吗?这里返回true
        boolean aIsBeforeB = a.isBefore(b);
         
        // a在b之后吗?这里返回false
        boolean aIsAfterB = a.isAfter(b);
      

9. 公历时刻相减

返回为两个公历时刻之间相差的秒数。

        // -3600
        int seconds =  SolarTime.fromYmdHms(2023, 1, 1, 0, 0, 0).subtract(SolarTime.fromYmdHms(2023, 1, 1, 1, 0, 0));
      

星座 Constellation轮回

星座依次为:白羊、金牛、双子、巨蟹、狮子、处女、天秤、天蝎、射手、摩羯、水瓶、双鱼。

节气 SolarTerm轮回

节气依次为:冬至、小寒、大寒、立春、雨水、惊蛰、春分、清明、谷雨、立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、白露、秋分、寒露、霜降、立冬、小雪、大雪。节气的初始化需要带上公历年份:

1. 通过索引值进行初始化

调用fromIndex(year, index)得到其对象。year为公历年,当传入2013年时,取到的冬至,实际上是在2012年,这里一定要注意;index为数字,从0开始,当索引值越界时,会自动轮回偏移。

        // 2013年的第1个节气:冬至
        SolarTerm term = SolarTerm.fromIndex(2013, 0);
      

2. 通过名称进行初始化

调用fromName(year, name)得到其对象。year为公历年,当传入2013年时,取到的冬至,实际上是在2012年,这里一定要注意;name为字符串,当名称不存在时,会抛出参数异常。

        // 2013年的立春
        SolarTerm term = SolarTerm.fromName(2013, '立春');
      

从节气可以得到些什么?

1. 是否节令

isJie()返回为true或false。

        SolarTerm term = SolarTerm.fromName(2013, '冬至');
         
        // false
        boolean isJie = term.isJie();
      

2. 是否气令

isQi()返回为true或false。

        SolarTerm term = SolarTerm.fromName(2013, '冬至');
         
        // true
        boolean isJie = term.isQi();
      

3. 儒略日

getJulianDay()返回为儒略日 Julianday

        SolarTerm term = SolarTerm.fromName(2013, '冬至');
         
        Julianday julianday = term.getJulianday();
      

儒略日 Julianday

儒略日可以通过以下几种方式得到:

1. 通过儒略日数值进行初始化

调用fromJulianday(jd)得到其对象。jd为小数。

        // 公历2023年1月1日
        Julianday julianday = Julianday.fromJulianday(2459945.5);
      

2. 通过公历年月日时分秒进行初始化

调用fromYmdHms(year, month, day, hour, minute, second)得到其对象。

        Julianday julianday = Julianday.fromYmdHms(2023, 1, 1, 0, 0, 0);
      

3. 通过公历日 SolarDay转换而来。

        Julianday julianday = SolarDay.fromYmd(2023, 1, 1).getJulianday();
      

4. 通过公历时刻 SolarTime转换而来。

        Julianday julianday = SolarTime.fromYmdHms(2023, 1, 1, 12, 30, 0).getJulianday();
      

从儒略日可以得到些什么?

1. 数值

getDay()返回小数。

        Julianday julianday = SolarDay.fromYmd(2023, 1, 1).getJulianday();
         
        // 2459945.5
        double jd = julianday.getDay();
      

2. 公历日

getSolarDay()返回公历日 SolarDay

        Julianday julianday = Julianday.fromJulianday(2459945.5);
         
        // 2023年1月1日
        SolarDay solarDay = julianday.getSolarDay();
      

3. 公历时刻

getSolarDay()返回公历时刻 SolarTime

        Julianday julianday = Julianday.fromJulianday(2459945.5);
         
        // 2023年1月1日 00:00:00
        SolarTime solarTime = julianday.getSolarTime();
      

4. 星期

通过儒略日计算的星期是最准的,基姆拉尔森和蔡勒公式计算星期的准确性,在儒略日面前都是弟弟,不服来辩。

getWeek()返回星期 Week

        Julianday julianday = Julianday.fromJulianday(2459945.5);
         
        // 日
        Week week = julianday.getWeek();
      

法定假日 LegalHoliday

法定假日有:元旦节、春节、清明节、劳动节、端午节、中秋节、国庆节、国庆中秋、抗战胜利日。仅支持2002年(含)至2024年(含)的法定假日。可以通过公历日 SolarDay得到,也可指定年、月、日得到。

        SolarDay solarDay = SolarDay.fromYmd(2023, 10, 1);

        // 国庆节
        LegalHoliday holiday = solarDay.getLegalHoliday();
         
        // 国庆节
        holiday = LegalHoliday.fromYmd(2023, 10, 1);
        
        // 非法定假日,返回null
        holiday = LegalHoliday.fromYmd(2023, 4, 20); 
      

调休怎么判断?

通过调用法定假日的isWork()方法得到当天是否上班。

        // 春节
        LegalHoliday holiday = LegalHoliday.fromYmd(2024, 2, 4);

        // true,代表要上班
        boolean woek = holiday.isWork();
      

如何实现放假倒计时?

通过next(1)获取下一个法定假日,相同假期名称且不上班的,取第一天。

        // javascript
        // 设置最多10条
        var size = 10;
         
        // 取今天
        var now = new Date();
        var year = now.getFullYear();
        var today = SolarDay.fromYmd(year, now.getMonth() + 1, now.getDate());
         
        var name = null;
        var l = [];
         
        // 元旦节当天肯定放假
        var holiday = LegalHoliday.fromYmd(year, 1, 1);
        while (holiday && size > 0) {
          var nm = holiday.getName();
          if (nm != name && !holiday.isWork() && holiday.getDay().isAfter(today)) {
            l.push(holiday);
            name = nm;
            size--;
          }
          holiday = holiday.next(1);
        }
         
        for (var i = 0, j = l.length; i < j; i++) {
          var h = l[i];
          console.log('距 ' + h.getName() + ' 还有 ' + (h.getDay().subtract(today) - 1) + ' 天');
        }
      

公历现代节日 SolarFestival

公历现代节日有:元旦、三八妇女节、植树节、五一劳动节、五四青年节、六一儿童节、建党节、八一建军节、教师节、国庆节。可以通过公历日 SolarDay得到,也可指定年、月、日得到,也可指定索引得到。

        // 元旦
        SolarFestival festival = SolarDay.fromYmd(2023, 1, 1).getFestival();

        // 2023年第1个公历现代节日,元旦
        festival = SolarFestival.fromIndex(2023, 0);
         
        // 非公历现代节日,返回null
        festival = SolarDay.fromYmd(2023, 1, 20).getFestival();

        // 非公历现代节日,返回null
        festival = SolarFestival.fromYmd(2023, 4, 20);
      

公历现代节日都设有起始年,你可以用getStartYear()得到。

        // 元旦
        SolarFestival festival = SolarDay.fromYmd(2023, 1, 1).getFestival();
         
        // 1950
        int startYear = festival.getStartYear();
      

农历传统节日 LunarFestival

农历传统节日有:春节、元宵节、龙头节、上巳节、清明节、端午节、七夕节、中元节、中秋节、重阳节、冬至节、腊八节、除夕。可以通过农历日 LunarDay得到,也可指定农历年、月、日得到,也可指定索引得到。

        // 元宵节
        LunarFestival festival = LunarDay.fromYmd(2023, 1, 15).getFestival();
         
        // 2023年第1个农历传统节日,春节
        festival = LunarFestival.fromIndex(2023, 0);
         
        // 非农历传统节日,返回null
        festival = LunarDay.fromYmd(2023, 1, 2).getFestival();

        // 非农历传统节日,返回null
        festival = LunarFestival.fromYmd(2023, 1, 2);
      

星期 Week轮回

星期依次为:日、一、二、三、四、五、六。如下代码可指定从周几开始输出一周:

        // 以周一为起点
        int startIndex = 1;
        Week week = Week.fromIndex(startIndex);
        for (int i = 0; i < 7; i++) {
          System.out.println(week);
          // 往后推1天
          week = week.next(1);
        }
      

七曜 SevenStar轮回

也称七政、七纬、七耀,与星期一一对应,分别为:日、月、火、水、木、金、土。以下为七曜和星期的相互转换示例:

        // 二
        Week week = Week.fromIndex(2);
        // 火
        SevenStar sevenStar = week.getSevenStar();
         
        sevenStar = SevenStar.fromName("土");
        // 六
        week = sevenStar.getWeek();
      

干支 SixtyCycle轮回

干支,又叫六十甲子、六十干支周,依次为:甲子、乙丑、丙寅、丁卯、戊辰、己巳、庚午、辛未、壬申、癸酉、甲戌、乙亥、丙子、丁丑、戊寅、己卯、庚辰、辛巳、壬午、癸未、甲申、乙酉、丙戌、丁亥、戊子、己丑、庚寅、辛卯、壬辰、癸巳、甲午、乙未、丙申、丁酉、戊戌、己亥、庚子、辛丑、壬寅、癸卯、甲辰、乙巳、丙午、丁未、戊申、己酉、庚戌、辛亥、壬子、癸丑、甲寅、乙卯、丙辰、丁巳、戊午、己未、庚申、辛酉、壬戌、癸亥。

从干支可以得到些什么?

1. 天干

返回为天干 HeavenStem

        SixtyCycle sixtyCycle = SixtyCycle.fromIndex(1);

        // 乙
        HeavenStem heavenStem = sixtyCycle.getHeavenStem();
      

2. 地支

返回为地支 EarthBranch

        SixtyCycle sixtyCycle = SixtyCycle.fromIndex(1);

        // 丑
        EarthBranch earthBranch = sixtyCycle.getEarthBranch();
      

3. 纳音

返回为纳音 Sound

        SixtyCycle sixtyCycle = SixtyCycle.fromIndex(1);

        // 海中金
        Sound sound = sixtyCycle.getSound();
      

4. 彭祖百忌

返回为彭祖百忌 PengZu

        SixtyCycle sixtyCycle = SixtyCycle.fromIndex(1);

        // 乙不栽植千株不长 丑不冠带主不还乡
        PengZu pengZu = sixtyCycle.getPengZu();
      

5. 旬

返回为旬 Ten

        SixtyCycle sixtyCycle = SixtyCycle.fromName("乙卯");

        // 甲寅
        Ten ten = sixtyCycle.getTen();
      

6. 旬空

也称空亡,10天干与12地支匹配,必定会多出来2个地支,这2个即为旬空。返回为地支 EarthBranch

        SixtyCycle sixtyCycle = SixtyCycle.fromName("甲子");

        // 戌, 亥
        EarthBranch[] extraEarthBranches = sixtyCycle.getExtraEarthBranches();
      

天干 HeavenStem轮回

天干依次为:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。

从天干可以得到些什么?

1. 五行

返回为五行 Element

        HeavenStem heavenStem = HeavenStem.fromName("丙");
         
        // 火
        Element element = heavenStem.getElement();
      

2. 阴阳

返回为阴阳 YinYang

        HeavenStem heavenStem = HeavenStem.fromName("甲");
         
        // 阳
        YinYang yinYang = heavenStem.getYinYang();
      

3. 方位

返回为方位 Direction

        HeavenStem heavenStem = HeavenStem.fromName("甲");
         
        // 方位:东
        Direction direction = heavenStem.getDirection();
         
        // 喜神方位(《喜神方位歌》甲己在艮乙庚乾,丙辛坤位喜神安。丁壬只在离宫坐,戊癸原在在巽间。)
        direction = heavenStem.getJoyDirection();
         
        // 阳贵神方位(《阳贵神歌》甲戊坤艮位,乙己是坤坎,庚辛居离艮,丙丁兑与乾,震巽属何日,壬癸贵神安。)
        direction = heavenStem.getYangDirection();
         
        // 阴贵神方位(《阴贵神歌》甲戊见牛羊,乙己鼠猴乡,丙丁猪鸡位,壬癸蛇兔藏,庚辛逢虎马,此是贵神方。)
        direction = heavenStem.getYinDirection();
         
        // 财神方位(《财神方位歌》甲乙东北是财神,丙丁向在西南寻,戊己正北坐方位,庚辛正东去安身,壬癸原来正南坐,便是财神方位真。)
        direction = heavenStem.getWealthDirection();
         
        // 福神方位(《福神方位歌》甲乙东南是福神,丙丁正东是堪宜,戊北己南庚辛坤,壬在乾方癸在西。)
        direction = heavenStem.getMascotDirection();
      

4. 天干彭祖百忌

返回为天干彭祖百忌 PengZuHeavenStem

        HeavenStem heavenStem = HeavenStem.fromName("甲");
         
        // 甲不开仓财物耗散
        PengZuHeavenStem pengZuHeavenStem = heavenStem.getPengZuHeavenStem();
      

5. 十神

调用getTenStar(heavenStem)得到十神,参数为天干 HeavenStem ,返回为十神 TenStar。十神是通过五行判断,规则为:生我者,正印偏印。我生者,伤官食神。克我者,正官七杀。我克者,正财偏财。同我者,劫财比肩。

        // 日元(日主)
        HeavenStem me = HeavenStem.fromName("癸");
         
        // 正财
        TenStar tenStar = me.getTenStar(HeavenStem.fromName("丙"));
      

6. 长生十二神(地势)

调用getTerrain(earthBranch)得到长生十二神,参数为地支 EarthBranch ,返回为长生十二神 Terrain。长生十二神可通过不同的组合,得到自坐和星运。

        // 日元(日主)
        HeavenStem me = HeavenStem.fromName("癸");
         
        // 星运:沐浴
        Terrain terrain = me.getTerrain(EarthBranch.fromName("寅"));
      

地支 EarthBranch轮回

地支依次为:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。

从地支可以得到些什么?

1. 五行

返回为五行 Element

        EarthBranch earthBranch = EarthBranch.fromName("寅");
         
        // 木
        Element element = earthBranch.getElement();
      

2. 阴阳

返回为阴阳 YinYang

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 阳
        YinYang yinYang = earthBranch.getYinYang();
      

3. 方位

返回为方位 Direction

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 方位:北
        Direction direction = earthBranch.getDirection();
      

4. 地支彭祖百忌

返回为地支彭祖百忌 PengZuEarthBranch

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 子不问卜自惹祸殃
        PengZuEarthBranch pengZuEarthBranch = earthBranch.getPengZuEarthBranch();
      

5. 生肖

返回为生肖 Zodiac

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 鼠
        Zodiac zodiac = earthBranch.getZodiac();
      

6. 冲

子午冲,丑未冲,寅申冲,辰戌冲,卯酉冲,巳亥冲。getOpposite()返回为地支 EarthBranch

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 午
        EarthBranch zodiac = earthBranch.getOpposite();
      

7. 煞

逢巳日、酉日、丑日必煞东;亥日、卯日、未日必煞西;申日、子日、辰日必煞南;寅日、午日、戌日必煞北。getOminous()返回为方位 Direction

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 南
        Direction direction = earthBranch.getOminous();
      

8. 藏干之本气(主气)

getHideHeavenStemMain()返回为天干 HeavenStem

        EarthBranch earthBranch = EarthBranch.fromName("子");
         
        // 癸
        HeavenStem heavenStem = earthBranch.getHideHeavenStemMain();
      

9. 藏干之中气

getHideHeavenStemMiddle()返回为天干 HeavenStem,无中气的返回null。

        EarthBranch earthBranch = EarthBranch.fromName("寅");
         
        // 丙
        HeavenStem heavenStem = earthBranch.getHideHeavenStemMiddle();
      

10. 藏干之余气

getHideHeavenStemResidual()返回为天干 HeavenStem,无余气的返回null。

        EarthBranch earthBranch = EarthBranch.fromName("寅");
         
        // 戊
        HeavenStem heavenStem = earthBranch.getHideHeavenStemResidual();
      

五行 Element轮回

五行依次为:木、火、土、金、水。

1. 生(我生的)

        Element me = Element.fromName("火");
         
        // 土
        Element el = me.getReinforce();
      

2. 克(我克的)

        Element me = Element.fromName("金");
         
        // 木
        Element el = me.getRestrain();
      

3. 泄(生我的)

        Element me = Element.fromName("土");
         
        // 火
        Element el = me.getReinforced();
      

4. 耗(克我的)

        Element me = Element.fromName("木");
         
        // 金
        Element el = me.getRestrained();
      

纳音 Sound轮回

纳音依次为:海中金、炉中火、大林木、路旁土、剑锋金、山头火、涧下水、城头土、白蜡金、杨柳木、泉中水、屋上土、霹雳火、松柏木、长流水、沙中金、山下火、平地木、壁上土、金箔金、覆灯火、天河水、大驿土、钗钏金、桑柘木、大溪水、沙中土、天上火、石榴木、大海水。

彭祖百忌 PengZu

彭祖百忌,指在天干地支记日中的某日或当日里的某时不要做某事否则会发生某事。口诀如下:

        // 天干忌讳
        甲不开仓财物耗散,乙不栽植千株不长;
        丙不修灶必见灾殃,丁不剃头头必生疮;
        戊不受田田主不祥,己不破券二比并亡;
        庚不经络织机虚张,辛不合酱主人不尝;
        壬不泱水更难提防,癸不词讼理弱敌强。
         
        // 地支忌讳
        子不问卜自惹祸殃,丑不冠带主不还乡;
        寅不祭祀神鬼不尝,卯不穿井水泉不香;
        辰不哭泣必主重丧,巳不远行财物伏藏;
        午不苫盖屋主更张,未不服药毒气入肠;
        申不安床鬼祟入房,酉不会客醉坐颠狂;
        戌不吃犬作怪上床,亥不嫁娶不利新郎。
      

如何得到彭祖百忌?

1. 从干支 SixtyCycle得到

        // 甲不开仓财物耗散 子不问卜自惹祸殃
        PengZu pengZu = SixtyCycle.fromName("甲子").getPengZu();
      

从彭祖百忌可以得到些什么?

1. 天干彭祖百忌

getPengZuHeavenStem()返回为天干彭祖百忌 PengZuHeavenStem

        PengZu pengZu = SixtyCycle.fromName("甲子").getPengZu();
         
        // 甲不开仓财物耗散
        PengZuHeavenStem pengZuHeavenStem = pengZu.getPengZuHeavenStem();
      

2. 地支彭祖百忌

getPengZuHeavenStem()返回为地支彭祖百忌 PengZuEarthBranch

        PengZu pengZu = SixtyCycle.fromName("甲子").getPengZu();
         
        // 子不问卜自惹祸殃
        PengZuEarthBranch pengZuEarthBranch = pengZu.getPengZuEarthBranch();
      

也可直接通过天干 HeavenStem获取天干彭祖百忌 PengZuHeavenStem,通过地支 EarthBranch直接获取地支彭祖百忌 PengZuEarthBranch

        // 甲不开仓财物耗散
        PengZuHeavenStem pengZuHeavenStem = HeavenStem.fromName("甲").getPengZuHeavenStem();
         
        // 子不问卜自惹祸殃
        PengZuEarthBranch pengZuEarthBranch = EarthBranch.fromName("子").getPengZuEarthBranch();
      

二十八宿 TwentyEightStar轮回

二十八宿,是黄道附近的二十八组星象总称。上古时代人们根据日月星辰的运行轨迹和位置,把黄道附近的星象划分为二十八组,俗称二十八宿,包括:

        东方七宿:角、亢、氐、房、心、尾、箕;
        北方七宿:斗、牛、女、虚、危、室、壁;
        西方七宿:奎、娄、胃、昴、毕、觜、参;
        南方七宿:井、鬼、柳、星、张、翼、轸。
      

建除十二值神 Duty轮回

建除十二值神依次为:建、除、满、平、定、执、破、危、成、收、开、闭。

如何得到建除十二值神?

1. 从农历日 LunarDay得到

        // 农历2021年正月初一的建除十二值神
        Duty duty = LunarDay.fromYmd(2021, 1, 1).getDuty();
      

2. 从八字 EightChar得到

有些场景需要以节令切换的时刻区分,节令切换当天则会有两个值神,就需要从八字获取。

        // 农历2021年正月初一 13:00:00的建除十二值神
        Duty duty = LunarHour.fromYmdHms(2021, 1, 1, 13, 0, 0).getEightChar().getDuty();
      

黄道黑道十二神 TwelveStar轮回

黄道黑道十二神依次为:黄道、黑道。

从黄道黑道十二神可以得到些什么?

1. 黄道黑道

getEcliptic()返回为黄道黑道 Ecliptic

        TwelveStar twelveStar = TwelveStar.fromName("青龙");
         
        // 黄道
        Ecliptic ecliptic = twelveStar.getEcliptic();
      

黄道黑道 Ecliptic轮回

黄道黑道就两种,依次为:黄道、黑道。

从黄道黑道可以得到些什么?

1. 吉凶

getLuck()返回为吉凶 Luck

        Ecliptic ecliptic = Ecliptic.fromName("黄道");
         
        // 吉
        Luck luck = ecliptic.getLuck();
      

吉凶 Luck轮回

目前只支持两种,依次为:吉、凶。

方位 Direction轮回

依据后天八卦排序:坎北、坤西南、震东、巽东南、中、乾西北、兑西、艮东北、离南),方位依次为:北、西南、东、东南、中、西北、西、东北、南。

从方位可以得到些什么?

1. 九野

getLand()返回为九野 Land

        Direction direction = Direction.fromName("北");
         
        // 玄天
        Land land = direction.getLand();
      

宫 Zone轮回

宫依次为:东、北、西、南。

从宫可以得到些什么?

1. 方位

getDirection()返回为方位 Direction

        Zone zone = Zone.fromName("东");
         
        // 东
        Direction direction = zone.getDirection();
      

2. 神兽

getBeast()返回为神兽 Beast

        Zone zone = Zone.fromName("东");
         
        // 青龙
        Beast direction = zone.getBeast();
      

九野 Land轮回

九野和方位一一对应,依次为:玄天、朱天、苍天、阳天、钧天、幽天、颢天、变天、炎天。

从九野可以得到些什么?

1. 方位

getDirection()返回为方位 Direction

        Land land = Land.fromName("玄天");
         
        // 北
        Direction direction = land.getDirection();
      

神兽 Beast轮回

神兽和宫一一对应,依次为:青龙、玄武、白虎、朱雀。

从神兽可以得到些什么?

1. 宫

getZone()返回为宫 Zone

        Beast beast = Beast.fromName("青龙");
         
        // 东
        Zone zone = beast.getZone();
      

动物 Animal轮回

动物一般用于二十八宿,依次为:蛟、龙、貉、兔、狐、虎、豹、獬、牛、蝠、鼠、燕、猪、獝、狼、狗、彘、鸡、乌、猴、猿、犴、羊、獐、马、鹿、蛇、蚓。

元 Sixty轮回

一元等于三运,也就是60年,1甲子,元依次为:上元、中元、下元。常说三元九运,可以涵盖180年。

运 Twenty轮回

20年为1运,一共有九运,依次为:一运、二运、三运、四运、五运、六运、七运、八运、九运。

旬 Ten轮回

旬依次为:甲子、甲戌、甲申、甲午、甲辰、甲寅。1旬=10,常听说的八旬老人指80岁的老人,每月有上旬、中旬、下旬,指的则是10天。6旬正好为60年,对应六十甲子。

数九天 NineDay

敬请期待...

三伏天 DogDay

敬请期待...

七十二候 PhenologyDay

敬请期待...

三候 ThreePhenology轮回

敬请期待...

九星 NineStar轮回

敬请期待...

北斗九星 Dipper轮回

敬请期待...

逐月胎神 FetusMonth轮回

正十二月在床房,二三九十门户中,四六十一灶勿犯,五甲七子八厕凶。闰月无胎神。

如何得到逐月胎神?

1. 从农历月 LunarMonth初始化

        LunarMonth lunarMonth = LunarMonth.fromYm(2023, 1);
        FetusMonth fetus = FetusMonth.fromLunarMonth(lunarMonth);
      

逐日胎神 FetusDay

敬请期待...

八字 EightChar

所谓八字,就是出生年、月、日、时辰的干支(分别称年柱、月柱、日柱、时柱),共8个字。

如何得到八字?

1. 从四柱初始化

参数为年干支、月干支、日干支、时干支,可以同为字符串,也可同为干支 SixtyCycle对象。

        // 初始化方式一
        EightChar eightChar = new EightChar("丁丑", "癸卯", "癸丑", "辛酉");
         
        // 初始化方式二
        eightChar = new EightChar(
          SixtyCycle.fromName("丁丑"),
          SixtyCycle.fromName("癸卯"),
          SixtyCycle.fromName("癸丑"),
          SixtyCycle.fromName("辛酉")
        );
        
      

2. 从时辰 LunarHour得到八字

        // 2023年正月初一 10:00:00的八字
        EightChar eightChar = LunarHour.fromYmdHms(2023, 1, 1, 10, 0, 0).getEightChar();
      

从八字可以得到些什么?

1. 八字转公历时刻列表

getSolarTimes(startYear, endYear),参数startYear为开始年份,支持1-9999年;参数endYear为结束年份,支持1-9999年。返回为公历时刻 SolarTime的列表。

        // 1937年3月27日 18:00:00、1997年3月12日 18:00:00
        List<SolarTime> solarTimes = new EightChar("丁丑", "癸卯", "癸丑", "辛酉").getSolarTimes(1900, 2024);
      

2. 年柱

getYear(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("丁丑", "癸卯", "癸丑", "辛酉");
        // 丁丑
        SixtyCycle year = eightChar.getYear();
      

3. 月柱

getMonth(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("丁丑", "癸卯", "癸丑", "辛酉");
        // 癸卯
        SixtyCycle month = eightChar.getMonth();
      

4. 日柱

getDay(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("丁丑", "癸卯", "癸丑", "辛酉");
        // 癸丑
        SixtyCycle day = eightChar.getDay();
      

4. 时柱

getHour(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("丁丑", "癸卯", "癸丑", "辛酉");
        // 辛酉
        SixtyCycle hour = eightChar.getHour();
      

5. 胎元

getFetalOrigin(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("癸卯", "辛酉", "己亥", "癸酉");
        // 壬子
        SixtyCycle fetalOrigin = eightChar.getFetalOrigin();
      

6. 胎息

getFetalBreath(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("癸卯", "辛酉", "己亥", "癸酉");
        // 甲寅
        SixtyCycle fetalBreath = eightChar.getFetalBreath();
      

7. 命宫

getOwnSign(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("癸卯", "辛酉", "己亥", "癸酉");
        // 癸亥
        SixtyCycle ownSign = eightChar.getOwnSign();
      

8. 身宫

getBodySign(),返回为干支 SixtyCycle

        EightChar eightChar = new EightChar("癸卯", "辛酉", "己亥", "癸酉");
        // 己未
        SixtyCycle bodySign = eightChar.getBodySign();
      

9. 建除十二值神

getDuty(),返回为建除十二值神 Duty

        EightChar eightChar = new EightChar("癸卯", "辛酉", "己亥", "癸酉");
        Duty duty = eightChar.getDuty();
      

十神 TenStar轮回

敬请期待...

长生十二神 Terrain轮回

敬请期待...

童限 ChildLimit

敬请期待...

大运 DecadeFortune

敬请期待...

小运 Fortune

敬请期待...

枚举

枚举类型都可以调用以下几个方法:

1. 名称

调用getName()返回名称字符串。

        // 性别
        Gender gender = Gender.fromName("男");
        // 男
        String name = gender.getName();
      

2. 代码

调用getCode()返回数字代码。

        // 性别
        Gender gender = Gender.fromName("男");
        // 1
        int code = gender.getCode();
      

3. 通过代码进行初始化

调用fromCode(code)得到枚举对象。code为数字代码。

        // 阴
        YinYang yinYang = YinYang.fromCode(0);
      

4. 通过名称进行初始化

调用fromName(name)得到枚举对象。name为字符串,当名称不存在时,返回空。

        // 阴
        YinYang yinYang = YinYang.fromName("阴");
      

节日类型 FestivalType

节日类型枚举值有:DAY=0=日期,TERM=1=节气,EVE=2=除夕。

性别 Gender

性别枚举值有:WOMAN=0=女,MAN=1=男。

内网 Side

内外枚举值有:IN=0=内,OUT=1=外。

阴阳 YinYang

阴阳枚举值有:YIN=0=阴,YANG=1=阳。