# LunarCalendar **Repository Path**: iTiki/LunarCalendar ## Basic Information - **Project Name**: LunarCalendar - **Description**: 中国农历的Java实现,支持约300年公历范围:1850-02-12到2150-12-31;一个Java类不到1000行,不依赖任何第三方库。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2020-03-13 - **Last Updated**: 2024-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 中国农历 中国农历的Java实现,本着简洁的原则,用一个Java类不到1000行,不依赖任何第三方库实现。 支持公历范围为:1850-02-12到2150-12-31范围内,农历日期和公历日期的转换。支持获取年份的生肖以及天干地支表示。 ## 用法 直接下载源码或者导入依赖。 latest-version=1.2 maven: ``` com.github.heqiao2010 lunar {latest-version} ``` gradle: ``` compile("com.github.heqiao2010:lunar:{latest-version}") ``` 示例: 公历转农历: ``` Calendar today = Calendar.getInstance(); LunarCalendar lunar = LunarCalendar.solar2Lunar(today); System.out.println(today.getTime() + " <====> " + lunar.getFullLunarName()); ``` 农历转公历: ``` LunarCalendar lunar = new LunarCalendar(); Calendar today = LunarCalendar.lunar2Solar(lunar.getLyear(), lunar.getLmonth(), lunar.getLdate(), lunar.isLeapMonth()); System.out.println(lunar.getFullLunarName() + " <====> " + today.getTime()); ``` ## 实现思路 通过记录1850年-2150年间的农历信息到二维数组中,经过查询和相关计算就能实现公历日期和农历日期之间的转化。 例如:
{ 8, 131, 301, 331, 429, 528, 627, 726, 825, 924, 1023, 1122, 1222, 1320 }, // 1900
{ 0, 219, 320, 419, 518, 616, 716, 814, 913, 1012, 1111, 1211, 1310 }, // 1901
... * 每个数组的第一个数表示该年闰月月份,为0表示不闰月. * 数组中其他数表示该月初一对应的公历日期. ## 关于数据的验证 目前从公历范围:1901-01-01到2100-12-31 的数据是经过验证的,验证的依据是香港天文台提供的 [公历农历对照表](https://www.hko.gov.hk/tc/gts/time/conversion1_text.htm)。 超出此范围的数据验证可以对比其他数据,比如手机APP日历或者第三方API等。 ## 公历农历对照表 见solar2lunar.txt * Solar:1900-01-31 <====> Lunar:一九〇〇年正月初一 庚子年 鼠 * Solar:1900-02-01 <====> Lunar:一九〇〇年正月初二 庚子年 鼠 * Solar:1900-02-02 <====> Lunar:一九〇〇年正月初三 庚子年 鼠 * Solar:1900-02-03 <====> Lunar:一九〇〇年正月初四 庚子年 鼠 * Solar:1900-02-04 <====> Lunar:一九〇〇年正月初五 庚子年 鼠 * Solar:1900-02-05 <====> Lunar:一九〇〇年正月初六 庚子年 鼠 * Solar:1900-02-06 <====> Lunar:一九〇〇年正月初七 庚子年 鼠 * Solar:1900-02-07 <====> Lunar:一九〇〇年正月初八 庚子年 鼠 * Solar:1900-02-08 <====> Lunar:一九〇〇年正月初九 庚子年 鼠 * Solar:1900-02-09 <====> Lunar:一九〇〇年正月初十 庚子年 鼠 * Solar:1900-02-10 <====> Lunar:一九〇〇年正月十一 庚子年 鼠 * Solar:1900-02-11 <====> Lunar:一九〇〇年正月十二 庚子年 鼠 * Solar:1900-02-12 <====> Lunar:一九〇〇年正月十三 庚子年 鼠 * Solar:1900-02-13 <====> Lunar:一九〇〇年正月十四 庚子年 鼠 * Solar:1900-02-14 <====> Lunar:一九〇〇年正月十五 庚子年 鼠 * Solar:1900-02-15 <====> Lunar:一九〇〇年正月十六 庚子年 鼠 * Solar:1900-02-16 <====> Lunar:一九〇〇年正月十七 庚子年 鼠 * Solar:1900-02-17 <====> Lunar:一九〇〇年正月十八 庚子年 鼠 * Solar:1900-02-18 <====> Lunar:一九〇〇年正月十九 庚子年 鼠 * Solar:1900-02-19 <====> Lunar:一九〇〇年正月二十 庚子年 鼠
... ## Source Code - [LunarCalendar](https://github.com/heqiao2010/LunarCalendar) ## Credits - [heqiao2010](https://github.com/heqiao2010) ## 受conis用JS实现的lunar启发 [conis用JS实现的lunar](http://github.com/conis/lunar)