- 1 -
朔望月和二十四节气与历法
徐厚骏
㈠㈠㈠㈠ 中国历法中国历法中国历法中国历法
在没有历法之前,以月亮的位置纪日,从“新月”(傍晚时出现
在西方的蛾眉月)、“上弦月”、“满月”、“下弦月”、“残月”(清晨在东
方出现的弯月)、再到整夜看不到月亮的“朔”,再到“新月”,这就
是一个月。地球从冬至点开始围绕太阳运行一周回到冬至点称为一回
归年(约 365.2422日),其中每运行 15度有一节气点,合计二十四个
节气;月亮夹在地球和太阳的正中间时称日月合朔(“朔日”,日食一
定在合朔时),而在太阳和地球连线的延长线上时称望(“望日”,日月
相望、满月,月食一定在望日时),月亮从日月合朔运行到日月合朔
为一个朔望月(平均约 29.53059日)。中国最早有记载的历法,是制定
于战国和秦代的黄帝、颛顼、夏、殷、周和鲁六种历法,合称古六历,
即以回归年为年,以朔望月为月的历法,就是典型的阴阳历。日月合
朔的日期为中国农历每月的初一。
中国农历一年有十二个月或十三个月,以闰月来协调农历一年和
回归年的差异,大约在春秋中期(约公元前六世纪)即采用十九年设七
个闰月的方法,农历十九年平均每年大约为
((19×12+7)×29.53059)÷19=365.2468 天。
我国古代一直采用干支纪年、纪日,采用十二地支纪月、纪时。
十个天干和十二个地支每次各进一个就构成了六十个干支,也称六十
花甲或六十甲子。纪月是从含冬至的十一月开始为子月,纪时从午夜
二十三时开始为子时,每两小时为一个时辰。干支纪年时,每一个地
支对应一种动物,称作当年的属相。
我国历法把在公历中上半月的节气称“节气”,而把在公历中下
半月的节气称“中气”,节气在公历中的日期基本上是固定的,上半
年,节气为 5或 6 日,中气为 20或 21日;下半年,节气为 7 或 8
日,中气为 22或 23日,由于太阳运动的不均匀性,实际上可能相差
一、二日。农历的月份与二十四节气中的中气对应,正月(寅月)包含
雨水、二月(卯月)包含春分、三月(辰月)包含谷雨、四月(巳月)包含小
满、五月(午月)包含夏至、六月(未月)包含大暑、七月(申月)包含处暑、
八月(酉月)包含秋分、九月(戌月)包含霜降、十月(亥月)包含小雪、十
一月(子月)包含冬至、腊月(丑月)包含大寒,没有中气的月份为闰月,
- 2 -
但闰月不得设在十一月、腊月和正月。如 1984年农历甲子年不含中
气的月设为闰十月,十一月包含冬至和大寒两个中气,腊月包含了雨
水。而 1985年农历乙丑年正月不含中气也不是闰月。
中国历法中还有两个重要的时段,全年最热的天为“三伏”,即
夏至后干支纪日的第三个庚日开始为初伏,第四个庚日开始为中伏,
立秋后,第一个庚日开始的十天为末伏。显然,初伏为十天,中伏有
时十天,有时二十天,末伏为十天。全年最冷的天为“九九”,即从
冬至算起,每九天为一个“九”。广泛流传的“九九歌”:一九二九不
出手,三九四九冰上走,五九六九沿河看柳,七九河开,八九雁来,
九九加一九,耕牛谝地走。说明“九九”与农时、物候有密切的关系。
我国古代的历法由于计算的不精确,每月的初一与朔日之间可能
有一、二天的误差,特别是在列国割据之时,不同地区的历日也可能
有一、二天之差。现在的历法以寅月为正月(称寅正或建寅,与古夏
历同),古六历中的历法,有正月设在子月(称子正或建子,有黄帝、
周、鲁历)、丑月(称丑正或建丑,有殷历)、或亥月(称建亥,有颛顼
历),而不设在寅月。但这些都只是历史学范畴的事。
㈡㈡㈡㈡ 公历历法公历历法公历历法公历历法
公历起源于古罗马,最早也是以月亮的位置纪日,发展为以朔望
月为基础的太阴历,据说一年分为十个月 304天,公元前 713年,努
马国王把一年增加两个月,变为一年十二个月 354天,且每月都是单
数天数,称作努马历。在公元前 509年,罗马政府又
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
每四年中增
设两个闰月,分别放在第二和第四年的末尾,在第二年末的为 22 天,
在第四年末的为 23天,罗马历法由太阴历演变为阴阳历。罗马历法
节气的起点是小寒(黄经 285度),把春分日(黄经 0 度)规定为全年的
第一天,即岁首。到公元前 191年左右开始,由于随意增设闰月,以
后的历法极为混乱,甚至寒暑颠倒,法国启蒙学者伏尔泰为此曾说:
“罗马人常打胜仗,但不知道胜仗是在哪一天打的。”
公元前 59年,儒略·凯撒成为罗马的执政官,即最高统治者。
公元前 46年儒略·凯撒邀请了埃及天文学家索息泽尼帮助改历,颁
布了改历命令:
⑴ 每年设十二个月,全年 365日;
⑵ 冬至(黄经 270度)后十日定为岁首;
⑶ 从下一年起,每隔三年置一闰年,闰年计 366日,多出的一
- 3 -
日放在 2月后。每月的天数安排为
1月 2月 3月 4 月 5月 6 月 7月 8 月 9月 10月 11月 12月
31 29(30) 31 30 31 30 31 30 31 30 31 30
这个新历是太阳历,后来称为“儒略历”由于冬至后 10日为岁
首,春分日就成了 3 月 21日。
儒略·凯撒改历后一年被刺身亡,僧侣们把他规定的“每隔三年
置一闰年”的规则,误解为“每三年置一闰年”,从公元前 42 年置闰
开始,到公元前 9 年置闰时,竟置闰了十二次,比原规定多出了三个,
也绝无仅有的出现了十二次 2月 30日。
凯撒的侄子屋大维,在公元前 27年成了罗马的终身国家元首,
尊称“奥古斯都”,即“神圣”的意思。公元前 9年,他知道了多设
了三次闰年,因此屋大维宣布“从公元前 8 年到公元后 4 年间不再设
置闰年,从公元后 8年开始,每隔三年置一闰年”,同时,调整了每
月的天数安排为:
1月 2月 3月 4 月 5月 6 月 7月 8 月 9月 10月 11月 12月
31 28(29) 31 30 31 30 31 31 30 31 30 31
公元 325 年,欧洲基
督教国家在法国海滨城市
尼斯(NICE)召开宗教会
议,会议规定所有的于会
国都采用儒略历,春分日
应固定在 3 月 21 日。
由于儒略历平均每年
365.25天,到公元 1582 年
时,春分日实际上已经在
3 月 11日,格里高利改历
把 1582年 10月 4日后的
一天改成为 1582年 10月
15日(10月 5日至 10月 14
日十天消失了),称作格里
高利历(即现在的公历),改
历的内容主要是:把春分
日改回 3月 21日;世纪数
不能被 4整除的世纪年不
- 4 -
再作为闰年,仍算作平年。这样,平均每年 365.2425 天,与回归年
更为接近。历史上通常称 1582年 10月 4日之前全为儒略历,不再计
较儒略历前期的每月日数不同、置闰错误和奥古斯都改历(研究当年
的历史事件除外);1582 年 10 月 15 日后为格里高利历(简称格里历)。
另外,基督教传说,基督耶稣被钉死在十字架后第三日复活,也
是在尼斯会议上规定,每年过春分月圆后第一个星期日为复活节。十
六世纪西欧基督教国家改用格里历后,与正教国家因历法不同,复活
节常常相差一、二个星期。计算复活节的日期,是一件困难的任务,
中世纪期间,有许多迹象表明,在欧洲,算术的唯一重要的应用就是
计算复活节的日期。古代欧洲的纪年,常用“罗马建国”或罗马统治
者狄奥克列颠称帝时作为纪年的开始,但公元一世纪时,基督教在欧
洲兴起,后来由于欧洲宗教势力的强大,僧侣们要把历法与基督教联
系起来,狄奥克列颠纪元 241年时,一个名叫迪奥尼西的僧侣在计算
狄奥克列颠纪元 248年的复活节日期的,提出了所谓耶稣诞生在狄奥
克列颠纪元前 284年,主张以耶稣诞生做为纪元,得到教会的大力支
持,狄奥克列颠纪元 248年就一变而成为耶稣诞生纪元 532年。这种
纪年法开始在教会中使用,到十五世纪中叶时,教皇发布的文告中已
经普遍采用。到 1582年制定格里历时,这种纪年法已行用多时了,
称作公元纪年。
㈢㈢㈢㈢ 儒略日儒略日儒略日儒略日
在历法计算中有一个重要的计日方法称为“儒略日”,是天文学
上计算相隔长时间的累计日数时,直接用日来计数的单位,记作 JD。
儒略日取公元前 4713年 1月 1日格林尼治平时 12时为起算日期,顺
序连续累计计算。例如,1979 年 1 月 1 日 0 时的儒略日为 2443874.5
日,1979 年 10 月 1 日 0 时的儒略日为 2444147.5日,可简单的相减
得 273日。由于儒略日数字位数太多,国际天文学联合会于 1973年
采用简化儒略日 MJD,MJD=JD-2400000.5,MJD 相应的起点是 1858
年 11月 17日世界时 0时。下面程序中的计算,即采用儒略日。
朔望月和二十四节气的计算是天文学的范畴,天文计算非常繁
杂,如在计算民用日历摘要中,对精度要求不高时,可以采用现有数
据的回归公式,这就简单得多了,但误差相对较大,如果时间在 0 时
左右,就有可能日期有变化。
- 5 -
附一:附一:附一:附一: 六十干支六十干支六十干支六十干支
甲子、乙丑、丙寅、丁卯、戊辰、己巳、庚午、辛未、壬申、癸酉、
甲戌、乙亥、丙子、丁丑、戊寅、己卯、庚辰、辛巳、壬午、癸未、
甲申、乙酉、丙戌、丁亥、戊子、己丑、庚寅、辛卯、壬辰、癸巳、
甲午、乙未、丙申、丁酉、戊戌、己亥、庚子、辛丑、壬寅、癸卯、
甲辰、乙巳、丙午、丁未、戊申、己酉、庚戌、辛亥、壬子、癸丑、
甲寅、乙卯、丙辰、丁巳、戊午、己未、庚申、辛酉、壬戌、癸亥。
附二:附二:附二:附二: 二十四节气二十四节气二十四节气二十四节气
小寒、大寒、立春、雨水、惊蛰、春分、清明、谷雨、
立夏、小满、芒种、夏至、小暑、大暑、立秋、处暑、
白露、秋分、寒露、霜降、立冬、小雪、大雪、冬至 。
附三:附三:附三:附三: 十二地支与属相十二地支与属相十二地支与属相十二地支与属相
子鼠、丑牛、寅虎、卯兔、辰龙、巳蛇、
午马、未羊、申猴、酉鸡、戌狗、亥猪。
- 6 -
2010201020102010、2011201120112011年的日历摘要数据
采用下面计算日历摘要的程序计算得出的结果
公元公元公元公元 2010201020102010年年年年 农历正月初一以后为农历正月初一以后为农历正月初一以后为农历正月初一以后为 庚寅庚寅庚寅庚寅 年年年年
2010201020102010年二十四节气的日期时间
冬至(对应十一月)时间为: 公元 2009年 12月 22日 1时 52分, 干支为: 辛丑, 星期二
小寒 时间为: 公元 2010 年 1 月 5日 19时 4分, 干支为: 乙卯, 星期二
大寒( 对应腊月 )时间为: 公元 2010年 1月 20日 12时 33分, 干支为: 庚午, 星期三
立春 时间为: 公元 2010 年 2 月 4日 6时 48分, 干支为: 乙酉, 星期四
雨水( 对应正月 )时间为: 公元 2010年 2月 19 日 2 时 48分, 干支为: 庚子, 星期五
惊蛰 时间为: 公元 2010 年 3 月 6日 0时 35分, 干支为: 乙卯, 星期六
春分( 对应二月 )时间为: 公元 2010年 3月 21 日 1 时 37分, 干支为: 庚午, 星期日
清明 时间为: 公元 2010 年 4 月 5日 5时 34分, 干支为: 乙酉, 星期一
谷雨( 对应三月 )时间为: 公元 2010年 4月 20日 12时 37分, 干支为: 庚子, 星期二
立夏 时间为: 公元 2010年 5月 5日 22时 48分, 干支为: 乙卯, 星期三
小满( 对应四月 )时间为: 公元 2010年 5月 21日 11时 55分, 干支为: 辛未, 星期五
芒种 时间为: 公元 2010 年 6 月 6日 2时 47分, 干支为: 丁亥, 星期日
夏至( 对应五月 )时间为: 公元 2010年 6月 21日 19时 40分, 干支为: 壬寅, 星期一
小暑 时间为: 公元 2010 年 7 月 7日 13时 7分, 干支为: 戊午, 星期三
大暑( 对应六月 )时间为: 公元 2010年 7月 23 日 6 时 36分, 干支为: 甲戌, 星期五
立秋 时间为: 公元 2010年 8月 7日 22时 56分, 干支为: 己丑, 星期六
处暑( 对应七月 )时间为: 公元 2010年 8月 23日 13时 35分, 干支为: 乙巳, 星期一
白露 时间为: 公元 2010 年 9 月 8日 1时 36分, 干支为: 辛酉, 星期三
秋分( 对应八月 )时间为: 公元 2010年 9月 23日 10时 56分, 干支为: 丙子, 星期四
寒露 时间为: 公元 2010年 10月 8日 17时 6分, 干支为: 辛卯, 星期五
霜降( 对应九月 )时间为: 公元 2010年 10月 23日 20时 53分, 干支为: 丙午, 星期六
立冬 时间为: 公元 2010年 11月 7日 20时 54分, 干支为: 辛酉, 星期日
小雪( 对应十月 )时间为: 公元 2010年 11月 22日 18时 17分, 干支为: 丙子, 星期一
大雪 时间为: 公元 2010年 12 月 7 日 13时 48分, 干支为: 辛卯, 星期二
冬至(对应十一月)时间为: 公元 2010年 12月 22日 7时 42分, 干支为: 丙午, 星期三
- 7 -
2010201020102010年全年朔日的日期时间
公 元 2009年 12月 16日 20时 41分, 干支为: 乙未, 星期三 (十一月初一)
公 元 2010年 1月 15日 15 时 17分, 干支为: 乙丑, 星期五 (腊月初一)
公 元 2010年 2月 14日 10 时 14分, 干支为: 乙未, 星期日 (正月初一)
公 元 2010年 3月 16日 4时 13分, 干支为: 乙丑, 星期二 (二月初一)
公 元 2010年 4月 14日 20 时 7 分, 干支为: 甲午, 星期三 (三月初一)
公 元 2010年 5月 14日 9时 17分, 干支为: 甲子, 星期五 (四月初一)
公 元 2010年 6月 12日 19 时 40分, 干支为: 癸巳, 星期六 (五月初一)
公 元 2010年 7月 12日 3时 51分, 干支为: 癸亥, 星期一 (六月初一)
公 元 2010年 8月 10日 10 时 50分, 干支为: 壬辰, 星期二 (七月初一)
公 元 2010年 9月 8日 17时 52分, 干支为: 辛酉, 星期三 (八月初一)
公 元 2010年 10月 8日 2时 10分, 干支为: 辛卯, 星期五 (九月初一)
公 元 2010年 11月 6日 12 时 38分, 干支为: 庚申, 星期六 (十月初一)
公 元 2010年 12月 6日 1时 42分, 干支为: 庚寅, 星期一 (十一月初一)
2010201020102010年全年望日((((满月))))的日期时间
公 元 2009年 12月 2日 16 时 6 分, 干支为: 辛巳, 星期三
公 元 2010年 1月 1日 3时 38 分, 干支为: 辛亥, 星期五
公 元 2010年 1月 30日 14 时 14分, 干支为: 庚辰, 星期六
公 元 2010年 3月 1日 0时 14 分, 干支为: 庚戌, 星期一
公 元 2010年 3月 30日 10 时 6 分, 干支为: 己卯, 星期二
公 元 2010年 4月 28日 20 时 21分, 干支为: 戊申, 星期三
公 元 2010年 5月 28日 7时 31分, 干支为: 戊寅, 星期五
公 元 2010年 6月 26日 19 时 58分, 干支为: 丁未, 星期六
公 元 2010年 7月 26日 9时 51分, 干支为: 丁丑, 星期一
公 元 2010年 8月 25日 1时 4 分, 干支为: 丁未, 星期三
公 元 2010年 9月 23日 17 时 13分, 干支为: 丙子, 星期四
公 元 2010年 10月 23日 9 时 38分, 干支为: 丙午, 星期六
公 元 2010年 11月 22日 1 时 36分, 干支为: 丙子, 星期一
公 元 2010年 12月 21日 16时 25分, 干支为: 乙巳, 星期二
- 8 -
公元公元公元公元 2011201120112011 年年年年 农历正月初一以后为农历正月初一以后为农历正月初一以后为农历正月初一以后为 辛卯辛卯辛卯辛卯 年年年年
2012012012011111年二十四节气的日期时间
冬至(对应十一月)时间为: 公元 2010年 12月 22日 7时 42分, 干支为: 丙午, 星期三
小寒 时间为: 公元 2011年 1 月 6 日 0时 54分, 干支为: 辛酉, 星期四
大寒( 对应腊月)时间为: 公元 2011年 1月 20日 18 时 22分, 干支为: 乙亥, 星期四
立春 时间为: 公元 2011年 2月 4 日 12时 37分, 干支为: 庚寅, 星期五
雨水( 对应正月 )时间为: 公元 2011年 2月 19 日 8 时 37分, 干支为: 乙巳, 星期六
惊蛰 时间为: 公元 2011年 3月 6日 6时 25分, 干支为: 庚申, 星期日
春分( 对应二月 )时间为: 公元 2011年 3月 21 日 7 时 27分, 干支为: 乙亥, 星期一
清明 时间为: 公元 2011年 4月 5日 11时 24分, 干支为: 庚寅, 星期二
谷雨( 对应三月 )时间为: 公元 2011年 4月 20日 18时 25分, 干支为: 乙巳, 星期三
立夏 时间为: 公元 2011年 5月 6日 4时 36分, 干支为: 辛酉, 星期五
小满( 对应四月 )时间为: 公元 2011年 5月 21日 17时 43分, 干支为: 丙子, 星期六
芒种 时间为: 公元 2011年 6月 6日 8时 35分, 干支为: 壬辰, 星期一
夏至( 对应五月 )时间为: 公元 2011年 6月 22 日 1 时 28分, 干支为: 戊申, 星期三
小暑 时间为: 公元 2011年 7月 7日 18时 55分, 干支为: 癸亥, 星期四
大暑( 对应六月 )时间为: 公元 2011年 7月 23日 12时 24分, 干支为: 己卯, 星期六
立秋 时间为: 公元 2011年 8月 8日 4时 44分, 干支为: 乙未, 星期一
处暑( 对应七月 )时间为: 公元 2011年 8月 23日 19时 23分, 干支为: 庚戌, 星期二
白露 时间为: 公元 2011年 9月 8日 7时 24分, 干支为: 丙寅, 星期四
秋分( 对应八月 )时间为: 公元 2011年 9月 23日 16时 44分, 干支为: 辛巳, 星期五
寒露 时间为: 公元 2011年 10月 8日 22时 54分, 干支为: 丙申, 星期六
霜降( 对应九月 )时间为: 公元 2011年 10月 24日 2时 42分, 干支为: 壬子, 星期一
立冬 时间为: 公元 2011年 11月 8日 2时 43分, 干支为: 丁卯, 星期二
小雪( 对应十月 )时间为: 公元 2011年 11月 23日 0时 6分, 干支为: 壬午, 星期三
大雪 时间为: 公元 2011年 12月 7日 19时 37分, 干支为: 丙申, 星期三
冬至(对应十一月)时间为: 公元 2011年 12月 22日 13时 31分, 干支为: 辛亥, 星期四
- 9 -
2012012012011111年全年朔日的日期时间
公 元 2010年 12月 6日 1时 42分, 干支为: 庚寅, 星期一 (十一月初一)
公 元 2011年 1月 4日 17时 11分, 干支为: 己未, 星期二 (腊月初一)
公 元 2011年 2月 3日 10时 28分, 干支为: 己丑, 星期四 (正月初一)
公 元 2011年 3月 5日 4时 31 分, 干支为: 己未, 星期六 (二月初一)
公 元 2011年 4月 3日 22时 12分, 干支为: 戊子, 星期日 (三月初一)
公 元 2011年 5月 3日 14时 29分, 干支为: 戊午, 星期二 (四月初一)
公 元 2011年 6月 2日 4时 42 分, 干支为: 戊子, 星期四 (五月初一)
公 元 2011年 7月 1日 16时 37分, 干支为: 丁巳, 星期五 (六月初一)
公 元 2011年 7月 31日 2时 31分, 干支为: 丁亥, 星期日 (七月初一)
公 元 2011年 8月 29日 11时 3 分, 干支为: 丙辰, 星期一 (八月初一)
公 元 2011年 9月 27日 19 时 10分, 干支为: 乙酉, 星期二 (九月初一)
公 元 2011年 10月 27日 3 时 48分, 干支为: 乙卯, 星期四 (十月初一)
公 元 2011年 11月 25日 13时 47分, 干支为: 甲申, 星期五 (十一月初一)
公 元 2011年 12月 25日 1 时 35分, 干支为: 甲寅, 星期日 (腊月初一)
2012012012011111年全年望日((((满月))))的日期时间
公 元 2010年 12月 21日 16时 25分, 干支为: 乙巳, 星期二
公 元 2011年 1月 20日 5时 33分, 干支为: 乙亥, 星期四
公 元 2011年 2月 18日 16 时 49分, 干支为: 甲辰, 星期五
公 元 2011年 3月 20日 2时 25分, 干支为: 甲戌, 星期日
公 元 2011年 4月 18日 10 时 56分, 干支为: 癸卯, 星期一
公 元 2011年 5月 17日 19 时 10分, 干支为: 壬申, 星期二
公 元 2011年 6月 16日 4时 7 分, 干支为: 壬寅, 星期四
公 元 2011年 7月 15日 14 时 35分, 干支为: 辛未, 星期五
公 元 2011年 8月 14日 3时 9 分, 干支为: 辛丑, 星期日
公 元 2011年 9月 12日 17 时 58分, 干支为: 庚午, 星期一
公 元 2011年 10月 12日 10时 39分, 干支为: 庚子, 星期三
公 元 2011年 11月 11日 4 时 27分, 干支为: 庚午, 星期五
公 元 2011年 12月 10日 22时 18分, 干支为: 己亥, 星期六
- 10 -
中国历法表
历名 编制人 编制年
份(公
元)
颁行年份(公元) 备注
黄帝历 战国时期,在不同地
区行用,其中颛顼历
用到公元前 104 年
子正 合称古六
历,19年
7闰
4
1
3651 =年
940
499
291 =月
颛顼历 亥正
夏 历 寅正
殷 历 丑正
周 历 子正
鲁 历 子正
太初历(三统历) (汉)邓平、落下
闳
前 104
年
前 104 年到后 84 年。
改历当年从元封七
年十月(亥月)朔到太
初元年十二月(丑月)
晦*1)止共有十五个月,
以冬至所在月为十一
月,
1539
385
3651 =年
81
43
291 =月
四分历 (东汉)李梵、编
訢
85年 85到 263 年
940
499
291 =月
乾象历 (东汉)刘洪 206 年 222 到 280 年 1年=365.2462
1 月=29.53054
景初历(太始历、
永初历)
(魏)杨伟 237 年 237 到 451 年 1月=29.53060
提出推算日食食分和
亏起方位的方法
三纪甲子元历 (后秦)姜岌 384 年 384 到 517 年 首创以月食时月所在
星度位置推算太阳所
在星度位置
元始历 (北凉) 412 年 412 到 439 年
452 到 522 年
设 600 年 221 个闰月
元嘉历(建元历) (宋)何承天 443 年 445 到 509 年 创调日法
大明历 (宋)祖冲之 463 年 510 到 589 年 1年=365.2428 日,将
岁差引入历法计算,
是宋统天历前最好的
数值,设 391 年 144
个闰月
正光历 (北魏)李兴业 521 年 523 到 565 年 沿袭以前各家
兴和历 (东魏)李兴业 540 年 540 到 550 年 沿袭以前各家
天保历 (北齐)宋景业 550 年 551 到 577 年 沿袭以前各家
天和历 (北周)甄鸾 566 年 566 到 578 年 沿袭以前各家
大象历 (北周)马显 579 年 579 到 583 年 粗疏简陋
开皇历 (隋)张宾 584 年 584 到 596 年 粗疏简陋
- 11 -
大业历 (隋)张胄玄 597 年 597 到 618 年 用等差级数求和方法
编行星位置
戊寅天历 (唐)傅仁钧、崔
善为
619 年 619 到 664 年 以前均用平朔、平气,
从此开始用定朔、平
气*2)安排历谱
麟德历 (唐)李淳风 665 年 665 到 728 年
大衍历 (唐)一行 728 年 729 到 761 年 用定气*3)编排太阳运
行表,创不等间距二
次差内插法,刊载日、
月每天位置和运动,
每天见到的星象,昼
夜时刻,日、月食和
五大行星位置。后代
历法家均采用这种格
式编历。
至德历 (唐)韩颖 758 年 758 到 762 年
五纪历 (唐)郭献之 762 年 762 到 783 年
符天历 (唐)曹士蒍 780 到
783 年
行于民间,直至宋代, 以雨水为气首,以一
万为日法数值的分
母,又称万分历
正元历 (唐)徐承嗣 783 年 784 到 806 年
观象历 (唐)徐昂 807 年 807 到 821 年
宣明历 (唐)日官 822 年 822 到 892 年 创日食三差(时差、气
差、刻差)法;近月点
为 27.55455 日,交月
点为 27.21222 日。
崇玄历 (唐)边冈 893 年 893 到 938 年 五星算法较精密
永昌历 (前蜀)胡秀林 909 年 909 到 911 年
正象历 (前蜀)胡秀林 912 年 912 到 925 年
调元历 (后晋)马重绩 937 年 939 到 943 年
947 到 994 年
兼取宣明历、
崇玄历的优
点
中原
地区
其他
时期
均用
崇玄
历
中正历 (南唐)陈成勋 940 年 940 到 950 年
齐政历 (南唐) 950 年 950 到 975 年
钦天历 (后周)王朴 956 年 956 到 963 年 计算行星位
置时用了等
加速度公式
应天历 (宋)王处纳 963 年 964 到 982 年 每夜五更,每更五点,
更点制在历法中自此
开始。
北宋时期,历法的推
算方法大都仿效崇玄
历。
乾元历 (宋)吴昭素 981 年 983 到 1000 年
- 12 -
大明历 (辽)贾俊 994 年 995 到 1125 年
1123 到 1136 年
仪天历 (宋)史序 1001 年 1001 到 1023 年
崇天历 (宋)宋行古 1024 年 1024 到 1064 年
1068 到 1074 年
明天历 (宋)周琮 1064 年 1065 到 1067 年
奉元历 (宋)卫朴 1074 年 1075 到 1093 年
观天历 (宋)黄居卿 1092 年 1094 到 1102 年
占天历 (宋)姚舜辅 1103 年 1103 到 1105 年
纪元历 (宋)姚舜辅 1106 年 1106 到 1127 年
1133 到 1135 年
首创用观测金星来定
太阳位置的方法
大明历 (金)杨级 1127 年 1137 到 1181 年
统天历 (南宋)陈德一 1135 年 1136 到 1167 年
乾道历 (南宋)刘孝荣 1167 年 1168 到 1176 年
淳熙历 (南宋)刘孝荣 1176 年 1177 到 1190 年
重修大明历 (金)赵知微 1181 年 1181 到 1234 年
1215 到 1280 年
月球的各种周期值和
黄赤交角值都很准确
会元历 (南宋)刘孝荣 1191 年 1191 到 1198 年
统天历 (南宋)杨忠辅 1199 年 1199 到 1207 年 1年=365.2425 日,是
中国古代历法中最精
确的值,认为回归年
长度在变化古大今小
开禧历 (南宋)鲍澣之 1207 年 1208 到 1251 年
淳祐历 (南宋)李德卿 1250 年 1252 年
会天历 (南宋)谭玉 1253 年 1253 到 1270 年
万年历 (金)扎马鲁丁 1267 年 行于少数民族年
成天历 (南宋)陈鼎 1271 年 1271 到 1276 年
本天历 (南宋)邓光荐 1277 年 1277 到 1279 年
授时历
(大统历)
(元)郭守敬 1280 年 1281 到 1644 年 创三次差内插法,并
用类似球面三角的公
式解决太阳黄赤道坐
标换算问题。
行用长达 364 年,明
朝颁行的大统历,基
本就是授时历
新法历
(时宪历)
(明)徐光启等 1634 年 1645 到 1723 年 采用第谷宇宙体系和
几何学、球面三角等,
正式采用定气
癸卯元历 (清)戴进贤 1742 年 1742 到 1911 年 采用开普勒行星运动
第一、第二定律
天历 (太平天国)洪
仁玕
1852 年 1852 到 1864 年 大小月相同,不计朔
望,不置闰月
公历(格里历) 1582 年 1912 年至今
- 13 -
*1):晦:农历每月最末的一天。
*2):定朔为天象计算的朔望月日期时间,平朔为朔望月的平均长度,平气为二十四节气间
的平均长度。
*3):定气为天象计算的二十四节气的日期时间。
计算日历摘要的程序
本程序在 Turbo C++ 1.0 编译通过,适用范围在公元前 1500年~
公元 2050年。采用现有数据的回归公式为计算方法。
/*/*/*/* LUNATION.CLUNATION.CLUNATION.CLUNATION.C 求农历每月朔求农历每月朔求农历每月朔求农历每月朔,,,, 望和二十四节气的时间望和二十四节气的时间望和二十四节气的时间望和二十四节气的时间 */*/*/*/
# include
# include
# include
# include
# include
# include
# include
# include
# include
# define IGREG 2299161 /* 1582 年 10月 15日,采用格里历的日期 */
# define ZON +8
# define RAD (3.141592653589793/180.0)
extern unsigned __stklen=65535;
unsigned char huge *week[]={"星期日","星期一","星期二","星期三","星期四","星期五","
星期六"};
unsigned char huge *s_and_b[]={"甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未
- 14 -
","壬申","癸酉", "甲戌","乙亥","丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未", "甲
申","乙酉","丙戌","丁亥","戊子","己丑","庚寅","辛卯","壬辰","癸巳", "甲午","乙未","丙申","
丁酉","戊戌","己亥","庚子","辛丑","壬寅","癸卯", "甲辰","乙巳","丙午","丁未","戊申","己酉
","庚戌","辛亥","壬子","癸丑", "甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬
戌","癸亥"};
unsigned char huge *solar_term[]={"冬至(对应十一月)","小寒 ","大寒( 对应
腊月 )","立春 ","雨水( 对应正月 )","惊蛰 ","春分( 对应二月 )","
清明 ","谷雨( 对应三月 )", "立夏 ","小满( 对应四月 )","芒种
","夏至( 对应五月 )","小暑 ","大暑( 对应六月 )","立秋 ","处暑
( 对应七月 )","白露 ", "秋分( 对应八月 )","寒露 ","霜降( 对应
九月 )","立冬 ","小雪( 对应十月 )","大雪 ","冬至(对应十一
月)"};
void caldat(long julian,int *mm,int *id,int *iyyy){
long ja,jalpha,jb,jc,jd,je;
if(julian>=IGREG){
jalpha=(long)(((double)(julian-1867216)-.25)/36524.25);
ja=julian+1+jalpha-(long)(.25*jalpha);
}else ja=julian;
jb=ja+1524;
jc=(long)(6680.0+((double)(jb-2439870)-122.1)/365.25);
jd=(long)(365*jc+(.25*jc));
je=(long)((jb-jd)/30.6001);
*id=jb-jd-(long)(30.6001*je);
*mm=je-1;
if(*mm>12) *mm-=12;
*iyyy=jc-4715;
if(*mm>2) --(*iyyy);
if(*iyyy<=0) --(*iyyy);
return;
}
void flmoon(long n,int nph,long *jd, float *frac){
- 15 -
long i;
double am,as,c,t,t2,t3,xtra,as1,am1;
c=n+nph/4.0;
t=c/1236.85;
t2=t*t;
t3=t2*t;
as1=286.4242+21.105366*n;
am1=218.0253+385.816918*n+0.010730*t2;
as=359.2242+29.105366*c;
am=306.0253+385.816918*c+.010730*t2;
*jd=2415020+28L*n+7L*nph;
xtra=(75.73064680088802e-2)+(18.93107253598732e+2)*t+(-2.56218590878741e-4)*t2+
(-5.18631250e-7)*t3;
if(nph==0 || nph==2){ /*朔日或望日*/
xtra +=(.1734-3.93e-4*t)*sin(RAD*as)-.4068*sin(RAD*am);
xtra +=(20.1112449670121040e-04)+(-1.062820342902582e-06) * sin(RAD*as1)+
(-5.098736229912763e-05) * t*sin(RAD*as1)+
(-4.720705574419968e-04) * sin(RAD*am1) ;
}
else if (nph==1 || nph==3) /*上弦月或下弦月*/
xtra +=(.1721-4.0e-4*t)*sin(RAD*as)-.6280*sin(RAD*am);
else printf("nph is unknown in flmoon !");
i=(long)(xtra >= 0.0 ? floor(xtra) : ceil(xtra-1.0));
*jd += i;
*frac=(float)xtra-i;
return;
}
- 16 -
void output(FILE *fo,long jud,float fac){
int id,mm,iyyy,h,m,wk,sb;
float frac,timzon=ZON/24.0;
long jd;
jd=jud;
frac=fac;
frac=24.0*(frac+timzon);
if (frac<0.0){
--jd;
frac +=24.0;
}
if (frac>12.0){
++jd;
frac -=12.0;
}else frac +=12.0;
wk=(int)(floor(fmod((double)(jd+1),7.0)));
sb=(int)(floor(fmod((double)(jd+49),60.0)));
caldat(jd, &mm, &id, &iyyy);
h=(int)(floor(frac));
m=(int)(floor((frac-h)*60.0+.5));
if(iyyy>0) {
printf("公 元%5d年%2d月%2d日%2d时%2d 分,",iyyy,mm,id,h,m);
fprintf(fo,"公 元%5d 年%2d 月%2d日%2d时%2d分,",iyyy,mm,id,h,m); }
else {
printf("公元前%5d年%2d月%2d日%2d时%2d 分,",iyyy*(-1),mm,id,h,m);
fprintf(fo,"公元前%5d 年%2d 月%2d日%2d时%2d
分,",iyyy*(-1),mm,id,h,m); }
printf(" 干支为: %s, %s",s_and_b[sb],week[wk]);
fprintf(fo," 干支为: %s, %s",s_and_b[sb],week[wk]);
- 17 -
return;
}
void main(){
char f,ch;
int i,j,idwk,nph,sb,year0,year;
float frac;
long jd,n,n0;
double july,july0;
double yuefen[19];
double july_0[25];
double huge revise0(int);
double huge revise1(int);
double huge revise2(int);
double huge revise3(int);
double huge revise4(int);
double huge revise5(int);
double huge revise6(int);
double huge revise7(int);
double huge revise8(int);
char fname[21];
char USER_PATH[]="C:\\USER.DAT";
char dir[MAXDIR];
char *txt=".TXT";
int length;
FILE *fo;
printf("\n 本程序计算指定年的二十四节气和日月合朔、日月相望的日期和时间,
日月合朔的");
printf("\n 日期为农历每月的初一,日月相望的日期为农历每月的十五或十六。农历
的月份与二十");
printf("\n 四节气中的中气对应,正月包含雨水、二月包含春分、三月包含谷雨、四
月包含小满、");
- 18 -
printf("\n 五月包含夏至、六月包含大暑、七月包含处暑、八月包含秋分、九月包含
霜降、十月包");
printf("\n 含小雪、十一月包含冬至、腊月包含大寒,没有中气的月份为闰月,但闰
月不得设在十");
printf("\n 一月、腊月和正月。如 1984年农历甲子年不含中气的月设为闰十月,十一
月包含冬至和");
printf("\n 大寒两个中气,腊月包含了雨水。而 1985 年农历乙丑年正月不含中气也不
是闰月。\n\n\n");
while(1){
printf("\n 输入公历年, 公元前为负, 输入`0'退出运行程序\n");
scanf("%d",&year0);
if(year0==0) break;
getcurdir(0,dir);
setdisk(2);
if(chdir("\\")){
perror("Error! chdir()");
exit(1);}
if(chdir(USER_PATH)){
if(mkdir(USER_PATH)){
perror("Error! Unable to create directory C:\USER.DAT");
exit(1);
}
if(chdir(USER_PATH)){
perror("Error! Unable to create directory C:\USER.DAT");}
}
itoa(year0,fname,10);
strcat(fname, txt);
length=strlen(fname);
for(i=0;i
本文档为【朔望月和二十四节气与历法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。