日历的基本原理

来源:http://www.herongyang.com/year_gb/calendar.html

日历是以天文学的三个不同的周期作为基础的:

  • 天:地球自转一周。
  • 月:月球围绕地球运行一周。
  • 年:地球围绕太阳运行一周。

如果以天作为单位,天文学的一年的平均时间是 365.2421896698 - 0.00000615359 T - 7.29E-10 T^2 + 2.64E-10 T^3 天,其中 T 的表达式为 (JD - 2451545.0)/36525,JD 是 Julian 天数。

如果以天作为单位,天文学的一月的平均时间是 29.5305888531 + 0.00000021621 T - 3.64E-10 T^2 天,其中 T 的表达式为 (JD - 2451545.0)/36525,JD 是 Julian 天数。

世界各国的日历都是以天作为最小单位,但是年和月的算法却各不相同,一共有 三大种类:

  • 阳历:以天文年作为日历的主要周期,例如:中国公历。
  • 阴历:以天文月作为日历的主要周期,例如:伊斯兰日历。
  • 阴阳历:以天文月和年作为日历的主要周期,例如:中国农历。

中国公历规则

中国公历也就是世界通用的 Gregorian 历,它以年作为主要周期。为了和天文 年保持同步,公历使用两种不同天数的年:

  • 常年:365 天。
  • 闰年:366 天。

公历年一般都是常年,只有少数年是闰年,由下面三条规则确定:

  • 一:如果年的数目是 4 的倍数,就是闰年。
  • 二:但是,如果年的数目是 100 的倍数,规则一就无效,仍是常年。
  • 三:但是,如果年的数目是 400 的倍数,规则二就无效,仍是闰年。

根据规则一,公历每 4 年就比天文年多 0.03124 天:

4 Gregorian years: 3 * 365 + 366 = 1461 days
4 tropical years:  4 * 365.2421896698 = 1460.9687586792 days

根据规则二,公历每 100 年就比天文年少 0.21897 天:

100 Gregorian years: 76 * 365 + 24 * 366 = 36524 days
100 tropical years:  100 * 365.2421896698 = 36524.21896698 days

根据规则三,公历每 400 年就比天文年多 0.12413 天:

400 Gregorian years: 305 * 365 + 95 * 366 = 146097 days
400 tropical years:  400 * 365.2421896698 = 146096.87586792 days

照此计算,公历每 2500 年就比天文年多出 1 天。

公历将一年分为十二个月。常年每月的天数分布如下:

月份    1    2    3    4    5    6    7    8    9   10   11   12
天数   31   28   31   30   31   30   31   31   30   31   30   31

闰年的二月为 29 天。

公历的月跟天文月毫无关系。

公历还有一个跟年和月毫无关系的周期,叫作星期,每星期七天。公历第一年的第 一天是星期一。

公历 400 年共有 146097 天,正好是 7 的倍数,所以星期和年每 400 年循环一 次。

中国农历规则

中国农历是阴阳历,同时跟天文月和天文年同步。

农历月的天数是一个变数,有时是 29 天,有时是 30 天。

农历每月的第一天是月亮全黑的日子。

农历年由 24 个节气来确定,节气则由太阳的角度来确定。农历的第一个节气叫 雨水,定在太阳的角度为 330 度的日子。其余的 23 个节气分别定在太阳的角度 每变化 15 度的日子。下面的表格列出了 24 个节气的名称和定义:

命称    角度    公历日期      周期
立春     315     2月 4日
雨水     330     2月19日    29.8天
惊蛰     345     3月 6日
春分       0     3月21日    30.2天
清明      15     4月 5日
谷雨      30     4月20日    30.7天
立夏      45     5月 6日
夏满      60     5月21日    31.2天
芒种      75     6月 6日
夏至      90     6月22日    31.4天
小暑     105     7月 7日
大暑     120     7月23日    31.4天
立秋     135     8月 8日
处暑     150     8月23日    31.1天
白露     165     9月 8日
秋分     180     9月23日    30.7天
寒露     195    10月 8日
霜降     210    10月24日    30.1天
立冬     225    11月 8日
小雪     240    11月22日    29.7天
大雪     255    12月 7日
冬至     270    12月22日    29.5天
小寒     285     1月 6日
大寒     300     1月20日    29.5天

24 个节气中有 12 个是主节气:雨水,春分,谷雨,夏满,夏至,大暑,处暑, 秋分,霜降,小雪,冬至,大寒。

农历年跟天文年相差较大。农历常年有十二个农历月,有 353,354,或者 355 天,比天文年少大约 11 天。为了跟天文年同步,每隔三个农历常年左右,必需设 一闰年。闰年有十三个月,添加的这个月叫闰月。

农历十二个月的名称分别为:正月,二月,三月,四月,五月,六月,七月,八 月,九月,十月,冬月,腊月。

农历闰年闰月的确定比较难,规则有两条:

  • 一:冬至必须落在农历冬月。如果落不上,腊月之前就要添上一个月,成为闰 年。
  • 二:如果是闰年,冬月后边第一个不含主节气的月份定为闰月。闰月使用前一 月份的名称。

农历年以 60 年为一周期,每年的名称由 10 个天干的一个字和 12 个地支的一 个字排列而成。10 天干为:甲,乙,丙,丁,戊,己,庚,辛,壬,癸。12 地支 为:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥。12 地支有 12 动物生肖 与其对应:鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪。

跟据历史记载,农历年已经经过了 78 个周期。今年,公历 1999 年,是第 79 个周期的第 17 年,也就是农历第 4696 年。

总结起来,中国农历有下例 6 条规则:

  • 一:月全黑规则 - 月全黑的日子是农历月的第一天。农历月周期由此而定。
  • 二:24 节气规则 - 24 节气把天文年按太阳角度分成 24 等份,15 度一节气。 这个规则确定了农历和天文年的关系。
  • 三:冬至规则 - 冬至必须落在农历冬月。如果落不上,腊月之前就要添上一个 月,成为闰年。
  • 四:闰月规则 - 如果是闰年,冬月后边第一个不含主节气的月份定为闰月。
  • 五:60 年周期 - 农历年以 60 年为一周期。
  • 六:规则一和二的计算必须以中国南京紫金山天文台的观察为准。

【转帖】中国农历规则和日历原理相关推荐

  1. linux系统使用命令一次显示日历,linux下的显示有中国农历的日历ccal

    cal: linux下显示日历的一般命令 使用格式usage: cal [-13smjyV] [[month] year][root@jacky ccal-2.5]# cal 2 2009 二月 20 ...

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

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

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

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

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

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

  5. 为Linux Mint Cinnamon的日历小程序增加中国农历显示以及其它部分参数优化

    我最近使用Linux Mint Xfce的时间比较多,这个操作系统虽然运行效率高,占用资源少,但是感觉Xfce桌面稳定性还存在不足,经常出现莫名其妙的画面抖动及部分区域出现花屏的现象,还容易出现使用者 ...

  6. 苹果系统中国日历服务器,中国农历Mac版

    此前给大家推荐过一款可以显示农历的Mac OS系统软件,但是小编总觉得不大好用,一个是时间不自动更新,第二个是升级版是收费的.今天,小编逛了许久的论坛之后终于找到一个免费.给力的 Mac农历万年历软件 ...

  7. js日历农历_中国农历日历的全部日历

    js日历农历 Vue月球全日历 (vue-lunar-full-calendar) Chinese lunar calendar for Fullcalendar. Fullcalendar的中国农历 ...

  8. 在XFCE桌面环境面板的clock插件之日历(calendar)部分增加中国农历显示功能

    在之前我通过修改calendar.js的方法解决了在Cinnamon桌面环境中增加中国农历显示的功能,但是在XFCE桌面环境中,面板的小部件不是由JavaScript编写的,功能修改起来就不一样了,需 ...

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

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

最新文章

  1. Python编程基础:第五十二节 高阶函数High Order Functions
  2. VBox:增加虚拟磁盘空间上限(虚拟系统为Linux)
  3. Scala代码案例:100以内的数求和,求出当和第一次大于20的当前数(循环中断机制)
  4. 26个LinkedList用法示例大全以及与ArrayList/数组的相互转换
  5. SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)
  6. mac删除android sd卡,如何从mac完全删除android及其所有文件?
  7. LeetCode 493. 翻转对(归并排序)
  8. 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
  9. net4.0的从客户端中检测到有潜伏危险的 Request.Form
  10. AccessibilityService+OpenCV实现微信7.0.0抢红包插件
  11. flutter 一键生成安卓和ios应用图标
  12. 测试用例设计方法之选择原则
  13. 树莓派串口/RS485通信
  14. CVPR2020 Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector论文翻译
  15. 几十个精选壁纸网站,配色网站,字体网站
  16. 清华计算机学院博士后,清华大学博士后
  17. Android自定义组件之日历控件-精美日历实现(内容、样式可扩展)
  18. 一个新手的评价---人机交互方面(有些不搭题
  19. 科普读书会丨《被讨厌的勇气》:愤怒不是目的,是一种工具
  20. 激光雷达基础:坐标系

热门文章

  1. Android仿游戏答题
  2. Hype教程:设置字体样式
  3. R6030- CRT not initialized
  4. Damask和abaqus晶体塑性联合仿真培训通知
  5. matlab 鲁棒优化,yalmip求解鲁棒优化
  6. uos专业版激活_UOS V20专业版新增了什么,UOS更新内容一览
  7. 办公室建模,vue2+three.js
  8. “连邦十年(1994——2004)用户心中十大最具影响力国产软件评选”揭晓
  9. c语言字符串输入输出函数总结
  10. Windows电脑如何运用CMD破解自己遗忘的WiFi,无需重置,轻松几步,便可得知密码