什么是农历闰月? 为什么大部分日历应用都处理错了
农历一年十二个月,每月 29 或 30 天,加起来大约 354 天 —— 比公历的太阳年短 11 天。如果不修正,这种差距会让节气在历年里慢慢漂移(春节会在二十年内漂到夏天)。为了让农历和季节保持一致,农历每两到三年插入一个额外的月,称为闰月(rùnyuè)。
十九年里有七个闰月 —— 这就是默冬周期(Metonic cycle),希伯来历、佛历也基于同一套算法。闰月总是紧跟在同名常规月之后:正常的五月过完,接着是闰五月,然后才是正常的六月。
为什么这对日历应用是个难题
大部分声称支持"农历重复"的日历应用,只支持普通的农历月 —— 它们默认每年都有同样的月份。对大多数日期这没问题,但对在闰月出生的人就出问题了。最极端的例子:1990 年闰五月初八出生的人,他的真正农历生日只在那些也有闰五月的年份存在。看一下接下来几十年,有闰五月的年是 1990、2009、2028、2047、2066 —— 七十六年里只有五次。
那么 2026 年(没有闰五月)怎么过这个生日? 这是每个农历日历工具都必须回答的问题,而大多数工具都默默选了一种策略却不告诉你。
三种合理的处理策略
这件事没有放之四海皆准的答案 —— 不同家庭有不同习惯。MoonCal 在你创建闰月事件时让你三选一:
| 策略 | 在没有对应闰月的年份, MoonCal 会做什么 |
|---|---|
| 跳过 | 当年不生成事件,下一次会等到下一个有对应闰月的年份。 |
| 使用同名常规月 | 使用同名的常规月(比如同样是 5 月)、同一天。这是最常见的选择 —— 很多家庭在没有闰月的年份就这么过。 |
| 使用前一个月 | 使用前一个常规月(比如改用 4 月)、同一天。不那么常见,但有些家庭这样做。 |
具体例子: 1990 年闰五月初八生日在 2026 年怎么过
假设有人 1990 年闰五月初八出生 —— 对应公历 1990 年 6 月 30 日。2026 年没有闰五月(2026 年的闰月是闰六月,规则上不能用作替代)。在 MoonCal 三种策略下分别是:
三种都"数学上合法",看你家里到底是怎么过的。
主流日历应用都怎么处理
不点名,但我们测试过几个主流日历应用和 ICS 订阅源,大致结果是:
这种细节对 95% 的用户都无关紧要 —— 但如果你或你在意的人正好在那 5% 里,这就是"生日悄悄消失"和"生日落在家里习惯的那天"之间的区别。