农历公历转换器(1900–2050)

把公历日期翻成农历月日、干支纪年与生肖,或者反过来由农历月日反查公历日期。数据表覆盖 1900 年正月初一到 2051 年二月初十共 151 个农历年、55163 天,闰月单独勾选,全程在浏览器本地算,不联网、不上传。

干支生肖以正月初一换年。
公历 2026-02-17 星期二 农历 丙午年(马年)正月初一 干支 丙午;生肖 马;当年无闰月 农历月 正月 30 天;全年 354 天 距 1900-01-31 第 46038 天
下面这张春节表共 151 行,默认显示 12 行。

默认示例:公历 2026 年 2 月 17 日。想验证闰月,请切到「农历转公历」,勾上闰月、月填 6、日填 1,得 2025-07-25。

使用方法

  1. 默认停在「公历转农历」,三个框已经填好 2026 年 2 月 17 日。点「转换」,或在这三个数字框里按回车,结果区立刻给出对应的农历日期。
  2. 公历三个框的范围分别是年 1900 到 2050、月 1 到 12、日 1 到 31。填了不存在的日期(比如 2025 年 2 月 30 日)会给出指明月份天数的提示。
  3. 切到「农历转公历」,下面四个控件生效:农历年 1900 到 2050、农历月 1 到 12、农历日 1 到 30,外加一个「闰月」勾选框。
  4. 「闰月」只在当年确实有闰月时才勾。2025 年闰六月:勾上闰月、月填 6、日填 1 得 2025-07-25;不勾、月填 7、日填 1 得 2025-08-23。当年没有闰月却勾了,会提示具体年份。
  5. 结果区分两层:上面一行是结论,下面一段是明细——星期几、干支纪年、生肖、这一农历月是 30 天还是 29 天、当年闰几月,以及这一天距基准日 1900-01-31 的天数。
  6. 明细下面是一张 151 行的春节表,列出 1900 到 2050 每一年正月初一对应的公历日期与当年闰月、全年天数。默认显示 12 行,点「加载更多」展开全部,点「导出 CSV」存成带字节序标记的文件。
  7. 「交换方向」把模式反过来,并把刚算出的结果填进另一侧的控件。
  8. 「重置」把输入框恢复成默认的 2026-02-17 并重新计算;「复制结果」复制整段明细;「复制对照表」复制正文那张 15 条锚点表,制表符分隔。
  9. 整页不联网、不写本地存储,输入的日期只参与这一次计算。

这个农历公历转换器能解决什么问题

农历日期在公历上每年都在跑。2025 年正月初一是 1 月 29 日,2026 年却跑到 2 月 17 日,前后差 19 天;端午、中秋、重阳同样一年一挪。要排值班表、订车票、给农历生日设提醒,第一步就是把农历月日换成公历日期。这件事没法心算:农历年的长度本身就不固定,2025 年有 384 天(闰六月,29 天),紧挨着的 2026 年只有 354 天。

第二类问题出在闰月上。闰六月出生的人,在没有闰六月的年份里过生日,按六月过还是按七月过,家里能争论好几年。本页先把出生那年的闰月如实转成公历——2025 年闰六月初一就是 2025-07-25——拿到真实日期后再决定往后按哪个月过。

第三类是干支与生肖的换年口径。本页以正月初一换年:2026-02-17 之前仍算乙巳蛇年,当天起才是丙午马年。若你查的是八字命理,那一边以立春为界。

第四类是旧籍与家谱的日期定位。老谱牒常写「庚子年七月初七」这类干支加月日的表述,本页先用干支把年份圈定(干支 60 年一循环,庚子对应 1900、1960、2020 等),再把月日换算成具体某天。

计算原理与变量说明

整页只有两个部件:一张 151 项的年度位域表,和一段按天推进的循环。每一项是一个整数,用位域把这一年的月份结构压进去,读法如下。

位域位数含义
低 4 位4闰几月,0 表示这一年没有闰月
位 4 至位 1512正月到腊月每月天数,1 为 30 天、0 为 29 天,正月在最高位
位 161闰月天数,1 为 30 天、0 为 29 天

1900 年那一项是 0x04bd8:低 4 位等于 8,表示这一年闰八月;位 16 为 0,表示闰八月只有 29 天。推进时先算出待查日期与基准日 1900-01-31 相差多少天,再从 1900 年起逐年减掉该农历年的总天数,减到不够减为止,剩下的余数在这一年内按月扣。年度总天数从 348(12 × 29)起算,只对「大月」标志位逐个加 1,最后再加闰月天数;没有闰月时闰月天数按 0 计,不能按 29 计,否则每年凭空多出 29 天,151 年会全部错位。月推进时遇到闰月,只插入一个月份而不推进月份序号,闰月因此紧跟在它所闰的那个月之后。

闰月的规则是「无中气则置闰」。二十四节气按太阳黄经每 15 度一个,共 24 个,排在单数位的叫节气、双数位的叫中气,两个中气的间隔约 30.436875 天(365.2422 ÷ 12),而一个朔望月只有 29.530588853 天。朔望月比中气间隔短,于是每隔几年就会有一个朔望月里一个中气都落不进去,那个月就被定为上一个月的闰月。这就是为什么闰月既没有固定月份、也没有可推算的年份规律。

19 年 7 闰只是巧合级的近似。19 个回归年 = 19 × 365.2422 = 6939.6018 天,235 个朔望月 = 235 × 29.530588853 = 6939.68838046 天,两者只差 0.0865804550003 天。本表 151 年里共有 56 个闰月年,折合每 19 年 7.05 闰——接近但并不是精确的 7,不能拿它去推某一年闰几月。

不补闰会怎样。12 个朔望月 = 354.367066236 天,比回归年 365.2422 天每年亏 10.875133764 天。这笔亏空全靠闰月补回来,不补的话十几年后春节就会挪到夏天去。

干支与生肖的算法。干支 60 年一循环、生肖 12 年一循环,取天干用 (年 − 4) % 10、取地支与生肖用 (年 − 4) % 12。2026 年得丙午、生肖马;1949 年得己丑、生肖牛。本页以正月初一换年,八字命理以立春为界,两者不是一回事。

本页不算节气。1645 年《时宪历》起节气由「平气」改为「定气」(按太阳真实黄经每 15 度一个),所以节气在公历上只在正负一天内浮动,1645 年之前的史料不能按定气反推。精确算节气需要太阳黄经的 VSOP87 级数——几百项三角级数——本页只做日期互转。

完整示例(数值仅作演示)

打开页面的默认值是公历 2026 年 2 月 17 日,结果是农历丙午年(马年)正月初一,星期二,距基准日 1900-01-31 第 46038 天。2026 年没有闰月,全年 354 天。

闰月场景:切到「农历转公历」,勾上闰月、年 2025、月 6、日 1,得 2025-07-25;不勾闰月、月填 7、日填 1,得 2025-08-23。中间夹着的就是那个 29 天的闰六月。

节日核对:2024-09-17、2025-10-06、2026-09-25 三天都是八月十五;2024-06-10 与 2025-05-31 都是五月初五。反过来查八月十五,应还原出这几个公历日期。

历史日期:1949-10-01 是己丑年八月初十(星期六);1900-01-31 是庚子年正月初一(星期三),也是本表唯一不需要推进的基准日。2050 年正月初一落在 2050-01-23。

农历与公历对照表

第一张表是 15 条自测锚点,覆盖春节、端午、中秋、闰月初一与历史日期,「复制对照表」复制的就是它。

公历日期农历日期说明
1900-01-31正月初一庚子年,本表基准日
1949-10-01八月初十己丑年
2020-01-25正月初一庚子年,鼠
2020-05-23闰四月初一2020 年闰四月
2023-01-22正月初一癸卯年,兔
2023-03-22闰二月初一2023 年闰二月
2024-06-10五月初五端午
2024-09-17八月十五中秋
2025-01-29正月初一乙巳年,蛇
2025-05-31五月初五端午
2025-07-25闰六月初一2025 年闰六月
2025-08-23七月初一闰六月之后的正七月
2025-10-06八月十五中秋
2026-02-17正月初一丙午年,马
2026-09-25八月十五中秋

第二张表抽出 12 个闰月年,连同当年闰几月与全年天数;全年天数要么 354 左右、要么 384 左右,差别就在闰月上。

农历年闰月全年天数农历年闰月全年天数
1900闰八月3841984闰十月384
1949闰七月3841995闰八月384
1957闰八月3842014闰九月384
1976闰八月3842020闰四月384
1979闰六月3842023闰二月384
1982闰四月3842025闰六月384

第三张表给出 2020 到 2031 的干支与生肖,用来核对结果明细里的纪年:60 年一循环与 12 年一循环不是同一件事。

年份干支生肖年份干支生肖
2020庚子鼠2026丙午马
2021辛丑牛2027丁未羊
2022壬寅虎2028戊申猴
2023癸卯兔2029己酉鸡
2024甲辰龙2030庚戌狗
2025乙巳蛇2031辛亥猪

读法:第一张看锚点是否对得上,差一天就说明推进逻辑有问题;第二张看闰月年,151 年里共 56 个;第三张看纪年。

结果边界、舍入与适用说明

常见问题

2026 年春节为什么到 2 月 17 日这么晚?

因为上一个农历年 2025 年闰六月,全年 384 天,比 2026 年的 354 天多出 30 天,把下一年的正月初一整体推后了。上一年有闰月,下一年春节必然偏晚。

闰月出生的人怎么过生日?

先把出生那年的闰月换成公历拿到真实日期:2025 年闰六月初一是 2025-07-25。多数家庭在没有闰六月的年份按六月过,也有人按公历日期过,选哪一天由家里定。

干支和生肖按正月初一还是立春?

本页按正月初一,2026-02-17 起才是丙午马年。八字命理按立春换年,与这里不是同一套口径,1、2 月出生的人两种算法会差一年。

为什么不能查 2051 年以后的农历?

因为数据表只有 1900 到 2050 共 151 项,覆盖到 2051-02-10 为止。再往后需要新的数据表,本页不会外推。

这个页面能算节气吗?

不能。精确算节气需要太阳黄经的 VSOP87 级数,是几百项三角级数的量级;1645 年《时宪历》之后又改成按真实黄经定气,本页只做日期互转。

农历月为什么有时 29 天有时 30 天?

因为农历月跟着朔望月走,一个朔望月是 29.530588853 天,不是整数。朔的时刻落在哪一天,哪一天就是初一,这个月因此是 29 天或 30 天,由数据表里的标志位记录。

1900 年之前的日期能查吗?

不能。本表的基准日是 1900-01-31,更早的日期没有表项可推进。清代及以前的历法还有平气与定气之分,即使有表也不能直接套用。

输入的日期会上传到服务器吗?

不会。输入框里的数字只在本页的脚本里参与整数加减,没有发起任何网络请求,也没有写入本地存储。

相关工具