中国农历

支持公历范围为: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

  • LunarCalendar

Credits

  • heqiao2010

License

The MIT License

参考

conis用JS实现的lunar

中国农历的Java实现相关推荐

  1. java有阴历年算法吗_中国农历算法java实现

    /** * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年 */ import java.text.*; import java.util.*; class Chines ...

  2. java 农历算法_中国农历算法java实现

    /** * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年 */ import java.text.*; import java.util.*; class Chines ...

  3. Java250 amp 249_中国公历算法amp;中国农历算法(JAVA)

    中国公历算法不是太难,关键是星期值的确定.这里给出了简单算法: public static int dayOfWeek(int y, int m, int d) { int w = 1; // 公历一 ...

  4. 【iOS】NSDate分类,获得中国农历

    1.说明: 参考网上代码写的一个分类,只需一句代码就可得到NSDate对象所对应的中国农历.星期. 2.使用方法: (1)导入分类头文件: #import "NSDate+ChineseDa ...

  5. 算法系列之二十:计算中国农历(二)

    (接上篇) 所谓的"天文算法",就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地 ...

  6. WPF中制作带中国农历的万年历

    WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历.  先看看效果图片(已缩 ...

  7. 写日历的程序员,你必须弄懂的中国农历算法。

    写日历的程序员,你必须弄懂的中国农历算法. NANSHAN即时通讯,我们知道农历通过置闰月的方式协调农历年和回归年长度不相等的问题,也知道了置闰的方法是"中气置闰"法,那么到底什么 ...

  8. C# 封装的功能强大的中国农历日历操作类的代码

    将代码过程经常用的代码片段备份一下,下边资料是关于C# 封装的功能强大的中国农历日历操作类的代码,希望能对大伙有些用途. private static int leapDays(int y){if ( ...

  9. 在blog中显示天气预报、日历、时钟、MSN、QQ在线状态、中国农历

    在blog中显示天气预报.日历.时钟.MSN.QQ在线状态 作者:game.19xz 来源:19xz.com <!-- 时钟clock_035.swf 的035为时钟样式,可自己选择 --> ...

最新文章

  1. Fiori应用里如何给客户主数据维护图片
  2. AFNetworking 3.0源码阅读 - AFURLResponseSerialization
  3. 2020年度JEECG开发者大赛,开发插件赚外块还能赢大奖!!
  4. php获取微信图片访问权限,微信小程序访问图片出现403,图片防盗链的解决办法...
  5. 9.2.2、Libgdx的输入处理之事件处理
  6. iOS网络请求下来的数据显示时出现的问题
  7. 如何去掉word中的回车符??
  8. 阿酷三合一版_3dmax阿酷插件
  9. java计算机毕业设计商品货物信息管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  10. 鲁宾逊《非标准分析》中译版正式上线
  11. litesql mysql 使用_Mysql 的使用方法
  12. js设置延时加载事件
  13. Example 类的作用
  14. altera fpga 约束
  15. 响应式织梦模板工业机械设备类网站
  16. 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码
  17. 用类求长方体的体积和面积
  18. LaTex---图片排版---多个子图构成一个大图,给子图加小标题(未解决)
  19. jquery改变css样式和vue改变样式的区别
  20. 智能综合布线管理软件实现机房配线可视化管理

热门文章

  1. 关于微信小程序富文本编辑器回显数据初始化editor的时候,页面滑动到最底部了
  2. Itext生成图表类型PDF
  3. EasyExcel导入导出下载模板(带下拉)
  4. php验证ssl证书key和crt,KEY与CRT匹配校验
  5. 如何鉴别和评审APS软件?内行人告诉你
  6. 机载计算机系统教材,机载计算机系统故障诊断.pdf
  7. VUE项目实践--网站管理系统
  8. java项目——Dom4j读取XML文件连接orecal数据库
  9. 企业对劳动仲裁不理该怎么解决
  10. 传智播客支持中国制造2025人才培养工程