中国农历的Java实现

中国农历

支持公历范围为:1900-01-31到2099-12-31范围内,农历日期和公历日期的转换。

实现思路

通过记录1900年-2099年间的农历信息到二维数组中,经过查询和相关计算就能实现公历日期和农历日期之间的转化。
例如:
{ 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表示不闰月.
  • 数组中其他数表示该月初一对应的公历日期.

方法概要

  • void add(int field, int amount) 日期增加
  • static int binSearch(int[] array, int n) 一个简单的二分查找,返回查找到的元素坐标,用于查找农历二维数组信息
  • static char getAnimalYearName(int y) 获取生肖名
  • int getDate()
  • java.lang.String getDayName(int lunarDay) 获取天
  • java.lang.String getFullLunarName() 返回中国农历的全名
  • int getLeapMonth()
  • int getMonth()
  • java.lang.String getMonthName(int lunarMonth) 获取农历月份
  • java.util.GregorianCalendar getSolar()
  • static java.lang.String getTraditionalYearName(int y) 返回传统天干地支年名称
  • int getYear()
  • java.lang.String getYearName(int lunarYear) 获取年
  • boolean isLeapMonth()
  • static long luanrDiff(LunarCalendar lc1, LunarCalendar lc2, int field) 计算两个农历日期之差
  • static java.util.Calendar lunar2Solar(int lunarYear, int lunarMonth, int LunarDate, boolean isLeapMonth) 农历转公历
  • void setDate(int date)
  • void setLeapMonth(boolean isLeapMonth)
  • void setLeapMonth(int leapMonth)
  • void setMonth(int month)
  • void setSolar(java.util.GregorianCalendar solar)
  • void setYear(int year)
  • static LunarCalendar solar2Lunar(java.util.Calendar solar) 公历转农历
  • void solarAdd(int field, int n)
  • static long solarDateCodesDiff(int solarCode1, int solarCode2, int field) 判断两个整数所代表公历日期的差值 一年按365天计算,一个月按30天计算
  • static long solarDiff(java.util.Calendar solar1, java.util.Calendar solar2, int field) 求两个公历日期之差,field可以为年月日,时分秒 一年按365天计算,一个月按30天计算
  • java.lang.String toString()

Test

  • 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

License

The MIT License

参考

conis用JS实现的lunar

猜你喜欢

转载自blog.csdn.net/he_qiao_2010/article/details/48274667