公农历转换

公历↔农历(含闰月)覆盖 1900-2100

413 次访问

公农历互转

公历日期

· 农历是中国传统历法(阴阳合历),以月相变化定月,以太阳运行定年

· 农历有平年(12 月)和闰年(13 月,含闰月),闰月规则按 19 年 7 闰

· 本工具数据范围 1900-2100,依据中国天文历法权威表,精确到天

关于本工具

了解工具定位 · 使用场景 · 对比优势

公历日期与农历日期(含闰月)互转,覆盖 1900 年至 2100 年。需要核对传统节日、安排农事活动、或处理涉及农历的出生日期、合同日期时使用。输入公历或农历日期,页面即时显示对应结果;转换计算在后端完成,不存储任何输入数据。

使用场景

🎂

生日农历查公历

老一辈只记农历生日(如腊月廿三),年轻人习惯公历。本工具输入农历月日(含闰月),一秒换算成对应公历日期,方便定蛋糕、安排聚餐、同步手机日历。覆盖 1900-2100,老人家的生日再也不会记错。

📅

传统节日日期确认

春节、端午、中秋等传统节日均按农历定日。本工具直接输入农历节日名称(如“五月初五”)→ 输出当年公历日期,比翻老黄历快,比百度搜索准(避免不同算法误差)。适合排假期、做活动策划、写日历插件。

🏮

择吉日参考

婚嫁、搬家、开业常参考农历吉日。本工具提供公历→农历换算,输入候选公历日期,输出对应农历月日、是否闰月,辅助比对老黄历上的宜忌。覆盖 1900-2100,支持闰月,不会出现“闰二月”算成“三月”的乌龙。

📖

历史人物生辰换算

研究历史人物(如鲁迅生于 1881 年农历八月初三)时,需将农历生辰换算为公历,才能对应史实时间线。本工具支持 1900 年起算,输入农历年月日,输出准确公历日期,避免“虚岁/实岁”混淆导致的年份偏差。

🕰️

老照片/旧档案日期

老照片背面常写“乙丑年腊月十五”,旧档案(如家谱、地契)多用农历纪年。本工具输入农历年号(如乙丑年)+ 月日,换算成公历日期,帮文史爱好者、家谱整理者、档案数字化人员精准标定时间。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(在线万年历)传统方法(纸质历书)
数据隐私纯浏览器计算,日期数据不上传服务器需联网,查询请求发送至服务器完全离线,无数据泄露风险
处理速度1 秒内完成转换1-3 秒(受网络延迟影响)数分钟至数小时(需人工翻查)
离线可用支持,页面加载后断网仍可转换不支持,必须保持网络连接支持,历书本身即是离线载体
覆盖范围1900-2100 年,共 201 年通常覆盖 1900-2100 年,部分更广取决于历书出版年份,通常仅覆盖当年或数年
闰月处理自动识别并正确转换农历闰月自动识别闰月需人工查阅闰月对照表,易出错
批量转换不支持,每次仅转换单个日期部分支持,可一次查询整月或整年不支持,需逐日翻查
更新维护页面加载后即固定,无需联网更新依赖服务端维护,可能因改版失效历书出版后即固定,无更新问题

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在「公历日期」输入框中选择或输入 1900-2100 年间的日期
  2. 点击「公历→农历」按钮,右侧显示对应农历日期(含闰月标注)
  3. 在「农历日期」输入框中输入农历年、月、日,并勾选「是否闰月」
  4. 点击「农历→公历」按钮,右侧显示对应公历日期
  5. 点击结果旁的「复制」按钮,将转换结果复制到剪贴板

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
2024-02-10农历甲辰年正月初一典型场景:公历转农历,春节当天
2024-03-10农历甲辰年二月初一典型场景:公历转农历,非特殊节点
农历甲辰年正月初一2024-02-10典型场景:农历转公历,春节当天
2023-06-18农历癸卯年五月初一边界 case:闰二月所在年份,五月正常
2023-03-22农历癸卯年闰二月初一边界 case:闰月输出,显示‘闰二月’
1900-01-31农历己亥年正月初一边界 case:工具支持范围起始年份
2100-12-31农历庚申年腊月初一边界 case:工具支持范围结束年份
2024-02-29农历甲辰年正月二十易错 case:闰年2月29日,公历合法日期

常见错误对照7 个常踩的坑 · 错误 → 修复

1. 公历年份超出工具覆盖范围

错误
输入公历 1899-01-01 或 2101-12-31
修复
输入公历 1900-01-01 到 2100-12-31 之间的日期

该工具仅覆盖 1900-2100 年,超出此范围的农历转换无可靠历法数据支撑,结果无意义。

2. 农历月份中混用公历月份数字

错误
农历 2024-01-01(想表达正月初一,但用了公历月数字1)
修复
农历 2024-正月初一 或 2024-01-01(农历正月)

农历月份用汉字数字(正、二、三…腊)或数字(01=正月,02=二月…12=腊月),但不可与公历月份数字混淆,否则工具无法区分输入意图。

3. 忽略闰月标记导致日期错位

错误
农历 2023-02-15(想表达闰二月十五,但未标注闰)
修复
农历 2023-闰02-15 或 2023-闰二月-十五

2023 年有闰二月,若不标注“闰”,工具会当作普通二月处理,输出公历日期相差约一个月。

4. 农历日期数字超出当月天数

错误
农历 2024-01-30(正月只有29天,输入30)
修复
农历 2024-01-29(正月最后一天)

农历大月30天、小月29天,正月(2024年)为小月仅29天,输入30天工具会报错或返回无效结果。

5. 公历日期格式不规范导致解析失败

错误
2024.1.1 或 2024/1/1 或 1/1/2024
修复
2024-01-01(ISO 8601 格式:YYYY-MM-DD)

工具仅接受 YYYY-MM-DD 格式,其他分隔符或顺序会被误解析或直接拒绝。

6. 农历转公历时输入不存在的农历日期

错误
农历 2033-12-30(该年腊月只有29天)
修复
查询该年农历十二月实际天数后再输入

农历闰月分布复杂(如 2033 年有闰十一月),腊月可能为小月(29天),输入30天无对应公历日期。

7. 将农历年份直接当作公历年份使用

错误
农历 2024-01-01 转公历后得到 2024-02-10,然后直接说“2024年春节是2月10日”
修复
明确区分“农历2024年”与“公历2024年”,转换后公历年份可能是2024或2025

农历新年(春节)在公历1月下旬至2月中旬,农历年份与公历年份并非一一对应,如农历2025年正月初一对应公历2025年1月29日。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

公历转农历:查表法(1900-2100 年农历数据表);农历转公历:查表法(1900-2100 年农历数据表)

变量说明

  • year — 公历年份(1900-2100)
  • month — 公历月份(1-12)
  • day — 公历日期(1-31)
  • lunar_year — 农历年份(对应干支纪年)
  • lunar_month — 农历月份(含闰月标记)
  • lunar_day — 农历日期(初一至三十)

示例

公历 2024 年 10 月 1 日 → 查表得对应农历为 2024 年八月廿九(甲辰年癸酉月己巳日)。反向:农历 2024 年八月廿九 → 查表得公历 2024 年 10 月 1 日。

适用范围

基于中国科学院紫金山天文台发布的 1900-2100 年农历数据表,覆盖公历 1900 年 1 月 31 日至 2100 年 12 月 31 日。超出此范围(如 1899 年或 2101 年)无法转换,因农历数据表未收录。

原理图

用户输入公历 / 农历日期后端计算引擎查表法 + 闰月修正覆盖 1900-2100输出结果转换后日期 + 节气输入校验 → 查表转换 → 闰月判断 → 结果格式化• 公历转农历:根据公历日期查农历对照表,判断是否闰月• 农历转公历:根据农历日期 + 闰月标记,查表得到公历日期
用户输入 后端处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import lunardate
from datetime import date

# 公历 → 农历
solar = date(2024, 10, 1)
lunar = lunardate.LunarDate.fromSolarDate(solar.year, solar.month, solar.day)
print(f"{solar} → 农历 {lunar.year}年{lunar.month}月{lunar.day}日")  # 2024-10-01 → 农历 2024年8月29日

# 农历(含闰月)→ 公历
lunar2 = lunardate.LunarDate(2023, 6, 15, isleap=True)  # 闰六月十五
solar2 = lunar2.toSolarDate()
print(f"农历 {lunar2.year}年闰{lunar2.month}月{lunar2.day}日 → {solar2}")  # 2023-08-01
package main

import (
	"fmt"
	"time"
	"github.com/nosixtools/solarlunar"
)

func main() {
	// 公历 → 农历
	solar := time.Date(2024, 10, 1, 0, 0, 0, 0, time.UTC)
	lunar := solarlunar.SolarToLunar(solar)
	fmt.Printf("%s → 农历 %d年%d月%d日\n", solar.Format("2006-01-02"), lunar.Year, lunar.Month, lunar.Day)

	// 农历 → 公历
	solar2 := solarlunar.LunarToSolar(2023, 6, 15, true) // true=闰月
	fmt.Printf("农历 2023年闰6月15日 → %s\n", solar2.Format("2006-01-02"))
}
const { Solar, Lunar } = require('lunar-javascript');

// 公历 → 农历
const solar = Solar.fromYmd(2024, 10, 1);
const lunar = solar.getLunar();
console.log(`${solar.toFullString()} → 农历 ${lunar.getYear()}年${lunar.getMonth()}月${lunar.getDay()}日`);
// 2024-10-01 → 农历 2024年8月29日

// 农历(含闰月)→ 公历
const lunar2 = Lunar.fromYmd(2023, 6, 15);
lunar2.setLeap(true); // 设为闰月
const solar2 = lunar2.getSolar();
console.log(`农历 2023年闰6月15日 → ${solar2.toFullString()}`);
// 2023-08-01

常见问题

8 个高频疑问

公农历转换结果准不准?跟手机日历上的农历对不上是怎么回事?
本工具使用天文算法计算节气与合朔时刻,农历日期基于紫金山天文台发布的《农历编算规则》,与手机日历(如苹果、小米自带日历)的算法一致,误差在1天内。如果出现对不上,常见原因有两个:一是手机日历未更新农历数据(尤其是旧版Android系统),建议手动同步系统时间或重启日历App;二是部分手机日历显示的是「前一日23:00后的子时」归属,而本工具按00:00为日界,子时归属可能差一天。
输入公历日期后,农历结果里的「闰月」是什么意思?怎么看出来是闰几月?
农历闰月是为了协调回归年与朔望月周期(约29.53天)而增设的月份,每2-3年出现一次。本工具在转换结果中会用红色或括号标注「闰X月」,例如「闰二月」表示该农历年中有两个二月。公历转农历时,如果当天落在闰月内,结果会明确显示「闰X月」字样;农历转公历时,输入「闰X月」即可。1900-2100年间的所有闰月数据已按《万年历》标准表预置,无需手动判断。
为什么农历腊月三十(除夕)有时候会显示「无」?是不是工具出错了?
不是错误。农历腊月(十二月)有29天或30天,如果当年农历十二月是「小月」(29天),那么腊月二十九就是除夕,腊月三十不存在。本工具严格按实际历法计算,遇到小月时腊月三十的转换结果会显示「无」或直接跳到正月初一。例如2022年农历腊月就是小月,除夕为腊月二十九。可以换一个已知有大月的年份(如2023年腊月有30天)验证工具准确性。
我想查1900年以前的农历生日,这个工具能查吗?
不能。本工具覆盖范围是1900年1月1日(公历)至2100年12月31日,超出此范围的日期无法转换。原因是:①1900年以前中国各地使用不同历法(如明朝《大统历》、清朝《时宪历》),官方历书数据不统一且难以数字化;②2100年后的农历数据依赖未来天文观测,当前无法精确计算。如果确实需要1900年以前的农历日期,建议查阅《近世中西史日对照表》(中华书局)或使用专业天文软件。
公历转农历和农历转公历,两个方向的结果能互相验证吗?会不会出现A转B再转A不一致?
可以互相验证,且在本工具中双向转换结果严格自洽。例如公历2024年1月1日转农历为「癸卯年十一月二十」,再将此农历日期转回公历,结果仍是2024年1月1日。算法在校验时对农历闰月做了特殊处理:如果某农历日期在闰月,转公历时必须指定「闰X月」,否则可能偏移一个月。建议用已知生日(如2000年1月1日→农历己卯年十一月廿五)做一次双向验证,确认工具正常运行。
输入农历日期时,月份和日期应该填几?比如「正月初一」是填1月1日吗?
不是。农历月份的输入需按数字填写:正月=1,二月=2,……十二月=12。日期同理:初一=1,初二=2,……三十=30。如果农历月份是闰月,需在月份前勾选或输入「闰」标记(界面有「闰月」复选框)。注意:农历没有「一月」的说法,正月就是1月;腊月就是12月。错误示例:把「正月初一」填成「1月1日」会得到公历1月1日,而非实际对应的公历日期(通常在1月下旬至2月下旬之间)。
这个工具和百度搜出来的其他万年历有什么区别?哪个更准确?
主要区别有三点:①数据范围:本工具覆盖1900-2100年,多数在线万年历只覆盖1900-2050年(部分更短);②闰月处理:本工具明确标注闰月归属,部分工具将闰月日期混入正常月份导致错误;③无广告干扰:本工具页面无弹窗广告,转换结果直接显示。准确度方面,所有基于紫金山天文台历书算法的工具(包括本工具、手机日历、中科院国家授时中心官网)结果一致。建议用1949年之后的日期(有官方历书可查)对比验证。
我输入了正确的日期,但工具没反应/一直转圈,怎么办?
先检查网络是否正常(本工具依赖服务器计算,需联网)。如果网络正常仍无反应,可能是输入格式有误:公历日期请用「YYYY-MM-DD」格式(如2024-01-01),农历日期月份和日期不能为0(正月从1开始)。另外,1900年2月前(含2月)的农历数据因历史历法改革存在争议,本工具对该时段做了特殊标记,转换可能稍慢(约2秒)。如果以上都正常,尝试清空浏览器缓存或换Chrome/Edge浏览器。仍不行可截图反馈。
选择 打开 +新窗口 esc关闭