lunarcalendar java_GitHub - heqiao2010/LunarCalendar: 中国农历的Java实现,支持约300年公历范围:1850-02-12到2150-12-31;...

中国农历

中国农历的Java实现,本着简洁的原则,用一个Java类不到1000行,不依赖任何第三方库实现。

支持公历范围为:1850-02-12到2150-12-31范围内,农历日期和公历日期的转换。支持获取年份的生肖以及天干地支表示。

用法

直接下载源码或者导入依赖。

stable-version=1.2

latest-version=1.4

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 的数据是经过验证的,验证的依据是香港天文台提供的

公历农历对照表。

超出此范围的数据验证可以对比其他数据,比如手机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

Credits

受conis用JS实现的lunar启发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! toString()方法输出阴历日期(例如:癸巳七月廿) getFullInfo()方法输出包括生肖在内的阴历日期(例如:癸巳七月廿,生肖:蛇) 构建方法包括以下四种: public LunarCalendar(String year, String month, String date) public LunarCalendar(JComboBox jcYear, JComboBox jcMonth, JComboBox jcDate) public LunarCalendar(int year, int month, int date) public LunarCalendar(Calendar cal)) 使用前两种构建方法时,若文本内容不为数字,getErrorMessage会返回错误信息 方法摘要 java.lang.String getErrorMessage() 返回String类型的错误信息 java.lang.String getFullInfo() 返回String类型的详细阴历信息(例如:癸巳七月廿,生肖:蛇) java.lang.String getLunarAnimal() 返回String类型的生肖(例如:蛇) java.lang.String getLunarDate() 返回String类型的阴历日期(例如:廿) java.lang.String getLunarMonth() 返回String类型的阴历月份(例如:七) java.lang.String getLunarYear() 返回String类型的阴历份(天干地支,例如:癸巳) java.lang.String toString() 返回String类型的阴历日期(例如:癸巳七月廿) JAR包名称:LunarCalendar version 1.0 8/26/2013 作者:Roy, Liu royliu90@live.cn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值