在网上看到一张2月14日的历史上的今天,说武大郎是公元1178年2月14日死的,和情人节是同一天。我也有点好奇,就稍微研究了一下。

直接点阅读更多看结论。

结论 公元2017年2月14日是农历丁酉年正月十八。武大郎死的日子是宋徽宗政和六年正月二十二,岁次丙申,用当时不存在的格里高利历(也就是现行公历)表示是1116年2月14日,用当时的历法儒略历表示是1116年2月7日。去年2016年是丙申年,和武大郎死的年份甲子重合。网图中的年份明显不对,因为宋徽宗在位时间是1082–1135,1178年都不是宋徽宗当皇帝了。

但能因此就说武大郎是情人节死的么?不好说。这个问题可以从以下的角度考虑。

《水浒传》的时间线

我不研究水浒,直接参考别人总结的时间表,武大郎死于宋徽宗政和六年,在通行的一百二十回本里,涉及的描写有:

看看天色黑了,那妇人在房里点上碗灯;下面先烧了一大锅汤,拿了一片抹布煮在汤里。听那更鼓时,却好正打三更。那妇人先把毒药倾在盏子里,却舀一碗白汤,把到楼上,叫声“大哥,药在那里?”武大道:“在我席子底下枕头边。你快调来与我吃。”

那妇人揭起席子,将那药抖在盏子里;把那药贴安了,将白汤冲在盏内;把头上银牌儿只一搅,调得匀了;左手扶起武大,右手把药便灌。武大呷了一口,说道:“大嫂,这药好难吃!”那妇人道:“只要他医治得病,管甚麽难吃。”武大再呷第二口时,被这婆娘就势只一灌,一盏药都灌下喉咙去了。那妇人便放倒武大,慌忙跳下床来。武大哎了一声,说道:“大嫂,吃下这药去,肚里倒疼起来!苦呀!苦呀!倒当不得了!”

这妇人便去脚後扯过两床被来没头没脸只顾盖。武大叫道:“我也气闷!”那妇人道:“太医分付,教我与你发些汗,便好得快。”武大再要说时,这妇人怕他挣扎,便跳上床来骑在武大身上,把手紧紧地按住被角,那里肯放些松宽。那武大哎了两声,喘息了一回,肠胃迸断,呜呼哀哉,身体动不得了!

水浒传·第二十四回

……何九叔道:“小人并然不知前後因地。忽於正月二十二日,在家,只见茶坊的王婆来呼唤小人殓武大郎尸首。……

水浒传·第二十五回

确切的讲,武大郎死于正月二十一日三更时分,三更合现在的24时制是23:00–1:00,从书里难以看出武大郎到底是三更过了多久才死,所以按出现的日期二十二日算。

儒略历 vs. 格里高利历

——武大郎哪天死的?
——宋徽宗政和六年正月二十二,阳历1116年2月14日。
——可是阳历(格里高利历)是1582年才有的啊?1116年怎么有阳历?
——那也要按照基本法格里高利历去计算。

如果你直接把这个日期在兩千年中西曆轉換计算,发现当时是「西元1116年2月7日」。可你查一下,公历(格里高利历)是1582年才有的,在1582年之前都是儒略历,所以,上面的网页里给出的是儒略历的日期,换算成「虚拟的」格里高利历是2月14日。如果你不信可以在那个网页里面看一下1582年10月的日历。也就是说,即便是当时的西方有情人节,也绝对不会在那一天过,因为当天在当时的日历上写的就是「2月7日」。

关于表示历史上日期的表述可以看学术界权威的说法

应该在哪天纪念武大郎

根据上面说的原则,如果以公历为准的话应该是每年的2月7日是武大郎的忌日。如果是农历的话是每年正月二十二。请问,在武大郎的忌日里面有没有公历是2月14日,甲子也是丙申的呢?世界之大无奇不有,1716年是丙申年,公历的2月14日是农历正月二十二。从武大郎死往后数1000年就这一年是这样的。如果不管甲子,也不管什么格里高利历和儒略历,只要沾2月14号就算,那么,有以下的日子是可以写段子的:

儒略历 格里高利历
1116-2-7 1116-2-14
1156-2-14 1156-2-21
1162-2-7 1162-2-14
1175-2-14 1175-2-21
1181-2-7 1181-2-14
1192-2-7 1192-2-14
1194-2-14 1194-2-21
1213-2-14 1213-2-21
1232-2-14 1232-2-21
1257-2-7 1257-2-14
1276-2-7 1276-2-14
1295-2-7 1295-2-14
1297-2-14 1297-2-21
1308-2-14 1308-2-22
1327-2-14 1327-2-22
1344-2-6 1344-2-14
1363-2-6 1363-2-14
1373-2-14 1373-2-22
1401-2-5 1401-2-14
1411-2-14 1411-2-23
1420-2-5 1420-2-14
1430-2-14 1430-2-23
1439-2-5 1439-2-14
1449-2-14 1449-2-23
1458-2-5 1458-2-14
1460-2-14 1460-2-23
1477-2-5 1477-2-14
1506-2-14 1506-2-24
1534-2-4 1534-2-14
1544-2-14 1544-2-24
1553-2-4 1553-2-14
1563-2-14 1563-2-24
1564-2-4 1564-2-14
1582-2-14 1582-2-24
1583-2-4 1583-2-14
1601-2-14 1601-2-24
1629-2-4 1629-2-14
1639-2-14 1639-2-24
1667-2-4 1667-2-14
1685-2-14 1685-2-24
1686-2-4 1686-2-14
1696-2-14 1696-2-24
1715-2-14 1715-2-25
1716-2-3 1716-2-14
1734-2-14 1734-2-25
1735-2-3 1735-2-14
1772-2-14 1772-2-25
1781-2-3 1781-2-14
1792-2-3 1792-2-14
1818-2-14 1818-2-26
1837-2-14 1837-2-26
1848-2-14 1848-2-26
1849-2-2 1849-2-14
1867-2-14 1867-2-26
1887-2-2 1887-2-14
1913-2-14 1913-2-27
1925-2-1 1925-2-14
1932-2-14 1932-2-27
1936-2-1 1936-2-14
1951-2-14 1951-2-27
1955-2-1 1955-2-14
1970-2-14 1970-2-27
1989-2-14 1989-2-27
2001-2-1 2001-2-14
2027-2-14 2027-2-27
2039-2-1 2039-2-14
2046-2-14 2046-2-27
2058-2-1 2058-2-14
2077-2-1 2077-2-14
2084-2-14 2084-2-27
2088-2-1 2088-2-14
2103-2-14 2103-2-28
2107-1-31 2107-2-14
2122-2-14 2122-2-28
2141-2-14 2141-2-28
2160-2-14 2160-2-28

有意思的是,22年后的2039年农历正月二十二正好是阳历的2月14日情人节。唉,不知本文能否活到那一天的到来。

🙏

谨以此文纪念死于书中那位悲剧人物武大郎。


代码

以上的这些结果都是用Emacs的calendar工具算的,比如上面的表是用如下代码实现的(需要最新的Emacs 26):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(make-thread
(lambda ()
(let ((c 63)
(y 33)
(m 1)
(d 22)
(absolute)
(gregorian)
(julian)
(out))
(require 'calendar)
(require 'cal-china)
(with-output-to-temp-buffer "*output*"
(while (<= c 80)
(when (> y 60)
(setq y (- y 60))
(setq c (1+ c)))
(setq absolute (calendar-chinese-to-absolute (list c y 1 22)))
(setq gregorian (calendar-gregorian-from-absolute absolute))
(setq julian (calendar-julian-from-absolute absolute))
(princ (format "儒略历:%d-%d-%d\t格里高利历:%d-%d-%d"
(nth 2 julian) (nth 0 julian) (nth 1 julian)
(nth 2 gregorian) (nth 0 gregorian) (nth 1 gregorian)
))
;; (if (<= (nth 2 gregorian) 1582)
;; (if (and (= y 33) (= 2 (nth 0 julian)) (= 14 (nth 1 julian)))
;; (princ "\t*\n")
;; (princ "\n"))
;; (if (and (= y 33) (= 2 (nth 0 gregorian)) (= 14 (nth 1 gregorian)))
;; (princ "\t*\n")
;; (princ "\n")))
(if (or (and (= 2 (nth 0 julian)) (= 14 (nth 1 julian)))
(and (= 2 (nth 0 gregorian)) (= 14 (nth 1 gregorian))))
(princ "\t*\n")
(princ "\n"))
(setq y (1+ y)))))))