中国传统历法-干支日速算问题

之前那篇中国传统历法发出后,有人问我关于干支日速算的问题。

吕老师您好!看了您的一篇历法文章 …… 我正在研究干支记日,想请教现在流行的口诀(乘五除四九加日……)为什么要事先用年数减去1900呢。

在此统一做一个解答。

本文同时发布在我的个人博客简书 上。

干支日速算口诀

网上流传的口诀是这样的:

乘五除四九加日,
双月间隔三十天,
一二自加整少一,
三五七八十尾前。

口诀的解释

这个计算法,实际上就是找一个已知干支日的具体日期,然后算循环。

  1. 1900年1月1日是甲戌日,干支序数为11(假设一个1月0日,干支为序号10,方便计算,这样1月X日的干支序号就是X+10)。

  2. 乘五除四是因为一年365天,一年干支差5天,算上闰年每4年多差一天。这样算下来,就是当年1月1日和1900年1月1日干支的差值。需要注意的是,闰年润在2月,闰年当年的1月1日并不差闰年当年那一天,所以如果恰好除尽的话应该再减1。

  3. 得到当年1月1日干支后,再算当前月1日和1月1日差几天。把当月之前的月份天数相加即可,如2月1日和1月1日差31天,4月1日和1月1日差(31+28+31)天,除60取余为30天。6月1日和1月1日差31+28+31+30+31+30天,相当于差1天。这就是所谓调整系数。要注意闰年2月多一天,当年调整系数都不一样。

  1. 得到当月1日的干支数,加上当天天数,就是当天干支数了。

我的公式:

10+(Y-1900)÷4❨取整,如除尽则再减1❩+(Y-1900)×5+月份调整系数+日期

得到的数字除60取余就是干支序号。

其实就是(基准干支序数+闰年差值+基本年初差值+月初差值+日期)/60取余数

明白了这个道理,完全可以自己定义一个新的口诀,比如2000年1月1日是戊午日(干支序号55),以此为起点可以制定以下公式:

54+(Y-2000)÷4❨取整❩+(Y-2000)×5+月份调整系数+日期

这个公式比之前那个公式优美的地方在于2000年本身是闰年,算闰年的时候不必「除尽再减1」了。而且计算量也小。

用程序计算干支日

其实前面的公式那么复杂,又是平年闰年,又是调整系数的,只是因为人脑的计算力有限,无法直接算出两个日期之间相差多少天。如果用程序计算,两个日期之间的差值完全可以直接算出来,再加上基准日期干支,得到的数字除以60再取余,就是当前日期干支了。

用Excel来尝试计算:

在A1单元格里输入「2000/1/1」,在B1单元格里输入「1900/1/1」,C1单元格里输入公式=A1-B1,在A4单元格里输入公式=MOD(C1+11,60),得出当日干支序号为56,即己未日

尴尬的事情发生了,当天明明是戊午日,干支序号是55。公式应该是没有问题的为什么结果差了一天?

原来Excel当初为了兼容一个古老的BUG,将1900年也当成了闰年,导致计算日期差值的时候,用1900年3月之后的日期,减1900年2月底之前的日期,都会有1天的差值。

明白了这个原因,只要重新设置一个起点就好了。1900年4月20日为葵亥日,干支序数为60,也可以理解为0

将B1单元格的日期改为「1900/4/20」,将A4单元格里的公式改为=MOD(C1,60),即可得到正确的干支序号55,即戊午日。

干支序数

十天干:

1 甲 2 乙 3 丙 4 丁 5 戊 6 己 7 庚 8 辛 9 壬 10 癸

十二地支:

1 子 2 丑 3 寅 4 卯 5 辰 6 巳 7 午 8 未 9 申 10 酉 11 戌 12 亥

干支序数:

01 甲子 11 甲戌 21 甲申 31 甲午 41 甲辰 51 甲寅
02 乙丑 12 乙亥 22 乙酉 32 乙未 42 乙巳 52 乙卯
03 丙寅 13 丙子 23 丙戌 33 丙申 43 丙午 53 丙辰
04 丁卯 14 丁丑 24 丁亥 34 丁酉 44 丁未 54 丁巳
05 戊辰 15 戊寅 25 戊子 35 戊戌 45 戊申 55 戊午
06 己巳 16 己卯 26 己丑 36 己亥 46 己酉 56 己未
07 庚午 17 庚辰 27 庚寅 37 庚子 47 庚戌 57 庚申
08 辛未 18 辛巳 28 辛卯 38 辛丑 48 辛亥 58 辛酉
09 壬申 19 壬午 29 壬辰 39 壬寅 49 壬子 59 壬戌
10 癸酉 20 癸未 30 癸巳 40 癸卯 50 癸丑 60 癸亥

月份调整系数

平年月份调整系数:

月份 调整系数
1月 0
2月 31
3月 59
4月 30
5月 0
6月 31
7月 1
8月 32
9月 3
10月 33
11月 4
12月 34

闰年月份调整系数:

月份 调整系数
1月 0
2月 31
3月 0
4月 31
5月 1
6月 32
7月 2
8月 32
9月 4
10月 34
11月 5
12月 35

参考文献

  1. 知乎:日干支究竟如何与公历日期相互转换?
  2. 知乎:也许是最冷的电脑冷知识:1900年闰年Bug
  3. 微软社区:Excel 公历1900年2月总天数的错误
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352