万年历计算之干支_第1页
万年历计算之干支_第2页
万年历计算之干支_第3页
万年历计算之干支_第4页
万年历计算之干支_第5页
已阅读5页,还剩4页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、万年历计算之 干支1、基本知识中国古代的一种纪年法。即以甲、乙、丙、丁、戊、己、庚、辛、壬、癸为十干,子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥为十二支,把干、支顺序配合。如甲子、乙丑等,经过六十年又回到甲子。周而复始,循环不已。我国农历现仍沿用干支纪年。 本文中,我将计算公历某年某月某日某时的干支称为排四柱(该名称来源于传统的命理算卦)。 本文中将现行公历和格里高利历理解为同一种立法。 由于干支纪年法是以 60 年一轮回的周期,周而复始,循环不已。所以无法用某个单纯的公式计算,只能推算(仅本人看法) ,既然推算就必须有个起点,本文中已公历 1583 年 1 月 1 日为起点(儒略日 15

2、82 年 10月 4 日为格里高利日 1582 年 10 月 15 日)。通过查阅权威资料我们可知道,公历公历 1583 年 1 月 1 日的年、月、日干支为壬午年壬子月壬辰日。有了这个起点,再利用干支纪年的规律就好推算了。 2、日柱的计算日柱 , 即日期用干支来表示。日柱的计算比较简单,说它简单是因为日柱的计算比较独立。需要注意的是,日柱的交界点为凌晨 12 点(普遍这么认为) ,此时刚好为子时(23:00 - 1:00 ),故将 23:00 - 24:00 称为初子时,意为今夜之子时,非明日之早。将24:00 - 1:00 称为正子时,意为明日之早。业界普遍将日柱分界点定位初子时,意思就是

3、说初子时算今天, 正子时算明天。(呵呵, 绕口的)首先,需要计算公历1583 年 1 月 1 日至你要计算干支的公历日期(当天算在内)的相隔天数(由于这个比较容易这里就不罗列出代码了)。然后,我这里给出一个我自己推导出的简单c 语言公式:/ 天干int nHeavenlyStems = ( 相隔天数% 10 +8)%10-1;/ 地支int nEarthlyBranches = ( 相隔天数% 12 +4) % 12 - 1;接下来再简单修正一下:if(hour >=23 | hour = 0)/ 已初子时为界(第二天的开始)nHeavenlyStems+;nEarthlyBranche

4、s+;nHeavenlyStems =(nHeavenlyStems = -1) ? 9 : nHeavenlyStems;结果为0 - 9,依顺序分别代表甲、乙、丙、丁、戊、己、庚、辛、壬、癸十干nEarthlyBranches = (nEarthlyBranches = -1) ? 11 :nEarthlyBranches;结果为0 - 11,依顺序分别代表子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 十二支 注意:日柱交界点是以初子时为界3、时柱的计算时柱 , 即时辰用干支来表示。时柱的地支是确定的。古人将每2 小时称为一个时辰,一天共12 时辰,刚好对应 12 地支,由凌晨 1 点开

5、始每两小时对应于一地支,依次为:子丑寅 .以下是对照表:子丑寅卯辰己23-0101-0303-0505-0707-0909-11午未申酉戊亥11-1313-1515-1717-1919-2121-23时柱的地支,这里我给出我自己推导出的简单c 语言公式:/ 地支int nEarthlyBranches =static_cast<int>(ceil(hour / 2.0);nEarthlyBranches = (nEarthlyBranches =12) ? 0 : nEarthlyBranches;结果为0 - 11,依顺序分别代表子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 十

6、二支 时柱的天干是不固定的,但可根据下面日上起时标推算时柱的天干(就是说时柱的天干和日干有关)时 日日上起时表甲己乙庚丙辛丁壬戊癸庚子壬子辛丑癸丑壬寅甲寅癸卯乙卯子丑寅卯辰甲子丙子戊子乙丑丁丑己丑丙寅戊寅庚寅丁卯己卯辛卯戊辰庚辰壬辰甲辰丙辰巳己巳辛巳癸巳乙巳丁巳午庚午壬午甲午丙午戊午未辛未癸未乙未丁未己未申壬申甲申丙申戊申庚申酉癸酉乙酉丁酉己酉辛酉戌甲戌丙戌戊戌庚戌壬戌亥乙亥丁亥己亥辛亥癸亥时柱的天干,这里我给出我自己根据上表推导出的简单c 语言公式:首先,需要计算公历1583 年 1月 1 日至你要计算干支的公历日期(当天算在内)的相隔天数(由于这个比较容易这里就不罗列出代码了) 。/ 天干

7、int nHeavenlyStems = ( 相隔天数% 10 +8)%10-1);nHeavenlyStems = (nHeavenlyStems = -1) ? 9 : nHeavenlyStems;nHeavenlyStems = (nHeavenlyStems % 5)* 2 + nEarthlyBranches) % 10;注意:时柱地支是固定的,天干与日柱天干有关。4、月柱的计算月柱,即月份用干支来表示。月柱的计算相对是最复杂的,因为月柱交界是以24 节气中的节气(令)的时间为交界点的,所以要准确计算月柱首先必须有能力就算24节气的时间。(关于24 节气的计算,不明白的朋友可以参考

8、的另一篇文章万年历计算之 节气)首先,根据24 节气的规律推导出该月所对应的节气(令),这里我给出我自己推导出的简单c 语言公式:太阳黄经角度(节气)= month >= 4 ? 15 + (month - 4) * 30 : 270+ month * 15; 其次,计算该节气的具体发生时间 (参:万年历计算 之 节气), 如果采用我的节气就算方法,那么计算出来的节气时间为格林尼治时间(UTC ),还需进一步转变为本地时间(LST )。再次,根据月柱的交界点条件,适当调整节气当地月份时间,公式如下:( monthLST ,dayLST 为指定节气发生的本地时间)monthLST = (m

9、onthLST > month) |(monthLST = month && dayLST > day) ?month - 1 : month;最后,利用我自己推导出的简单c 语言公式:/ 天干int nHeavenlyStems = (year - 1583) * 12 + monthLST + 12 - 4) % 10;结果为0 - 9,依顺序分别代表甲、乙、丙、丁、戊、己、庚、辛、壬、癸十干/地支int nEarthlyBranches = (year - 1583) * 12 +monthLST + 12) % 12;结果为0 - 11,依顺序分别代表子、丑

10、、寅、卯、辰、巳、午、未、申、酉、戌、亥 十二支 注意: monthLST ,dayLST 为指定节气发生的本地时间节气计算的结果为UTC 时间,需要转换为LST 时间月柱的交界点为 24 节气中的节气(也就是令) 5、年柱的计算年柱 , 即年份用干支来表示。 需要注意的是,年柱的交界点(也就是上一年和下一年的分界线)是以立春这一天的交节时刻划分的,而不是已农历的正月初一。因此,会出现某一天有两种年柱的现象,月柱、日柱,时柱都需要注意这点(下面不再提及) 。故首先,计算当年的立春时间(注意转换为本地时间)其次,根据年柱的交界点条件,适当调整节气的本地年份时间,公式如下:( yearLST ,monthLST ,dayLST为指定节气发生的本地时间)yearLST = (st_month > month | (st_month = month) && st_day > day) ?yearLST - 1 : yearLST;最后,我这里给出一个我自己推导出的简单c 语言公式:/ 天干int nHeavenlyStems = (yearLST - 1583 + 36-7)%10;结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论