公历(格里高利历)是现代日历的基础框架,其推算依赖两大核心规则:
1. 闰年判断逻辑:能被4整除但不能被100整除的年份为闰年(如2000年、2024年),能被400整除的年份也是闰年(如2000年),其余为平年。平年2月有28天,全年365天;闰年2月有29天,全年366天。这一规则源于地球绕太阳公转周期(约365.2422天)与公历年(365天)的差异修正,每400年设置97个闰年,使历年平均长度更接近回归年。
2. 月份天数固定:1、3、5、7、8、10、12月为大月(31天),4、6、9、11月为小月(30天),2月天数随闰年调整。这些规则是公历日期排列的基础。
二、星期推算的关键工具:公式算法
要确定某一天是星期几,常用蔡勒(Zeller)公式(适用于公历1582年10月15日之后)。公式为:
( w = left(y + leftlfloorfrac{y}{4}rightrfloor + leftlfloorfrac{c}{4}rightrfloor
2c + leftlfloorfrac{26(m+1)}{10}rightrfloor + d
1right) mod 7 )
其中,( c ) 为世纪数减1(如2024年为20),( y ) 为年份后两位(如2024年为24),( m ) 为月份(1、2月视为上一年的13、14月,如2024年1月视为2023年13月),( d ) 为日数。计算结果中,0代表星期日,16分别代表星期一到星期六。例如,计算2024年1月1日(视为2023年13月1日)的星期:( w = (23 + 5 + 0
40 + 36 + 1
1) mod 7 = 24 mod 7 = 3 ),即星期二(需注意公式对负数结果的修正,如加7取模)。
三、万年历的完整推算:多历法融合
万年历并非单纯的公历日历,而是整合了公历、农历、干支历等多套历法的信息,推算过程需兼顾不同历法的规则:
1. 公历部分:通过上述闰年规则和月份天数,确定公历日期的排列(如每月1日、每月天数)及对应的星期。
2. 农历部分:农历以月相变化周期(约29.5306天)为基础,大月30天、小月29天。为使农历年与回归年(约365.2422天)同步,采用“十九年七闰”规则(19年中插入7个闰月),闰月月份根据二十四节气确定(如某农历月无“中气”,则设为闰月)。例如,2023年闰二月,因农历二月后仅有一个节气“清明”。
3. 干支历部分:干支历以“六十甲子”循环纪年、纪月、纪日、纪时。纪年通过年份减3后除以10(余数对应天干)、除以12(余数对应地支)计算(如2024年:20243=2021,2021÷10余1→甲,2021÷12余5→辰,故为甲辰年);纪月通过“五虎遁年起月诀”(如甲己年丙寅月、乙庚年戊寅月)推算;纪日需通过已知日期的干支累计天数计算(60天一循环);纪时通过“五鼠遁日起时诀”(如甲己日甲子时、乙庚日丙子时)推算。
四、历史与修正:历法的演变与统一
公历的前身是儒略历(公元前45年由凯撒推行),其闰年为“四年一闰”,但因每年多算约11分钟,至1582年累计误差达10天。为此,教皇格里高利十三世推行格里历,将1582年10月5日改为10月15日,并调整闰年规则(排除“能被100整除但不能被400整除的年份”)。不同国家采用格里历的时间不同(如英国1752年、俄罗斯1918年),导致历史日期存在差异(如牛顿的生日在英国史书中为1642年12月25日(儒略历),而在格里历中为1643年1月4日)。