公农历互转
公历日期
公历↔农历(含闰月)覆盖 1900-2100
公历日期
· 农历是中国传统历法(阴阳合历),以月相变化定月,以太阳运行定年
· 农历有平年(12 月)和闰年(13 月,含闰月),闰月规则按 19 年 7 闰
· 本工具数据范围 1900-2100,依据中国天文历法权威表,精确到天
了解工具定位 · 使用场景 · 对比优势
公历日期与农历日期(含闰月)互转,覆盖 1900 年至 2100 年。需要核对传统节日、安排农事活动、或处理涉及农历的出生日期、合同日期时使用。输入公历或农历日期,页面即时显示对应结果;转换计算在后端完成,不存储任何输入数据。
老一辈只记农历生日(如腊月廿三),年轻人习惯公历。本工具输入农历月日(含闰月),一秒换算成对应公历日期,方便定蛋糕、安排聚餐、同步手机日历。覆盖 1900-2100,老人家的生日再也不会记错。
春节、端午、中秋等传统节日均按农历定日。本工具直接输入农历节日名称(如“五月初五”)→ 输出当年公历日期,比翻老黄历快,比百度搜索准(避免不同算法误差)。适合排假期、做活动策划、写日历插件。
婚嫁、搬家、开业常参考农历吉日。本工具提供公历→农历换算,输入候选公历日期,输出对应农历月日、是否闰月,辅助比对老黄历上的宜忌。覆盖 1900-2100,支持闰月,不会出现“闰二月”算成“三月”的乌龙。
研究历史人物(如鲁迅生于 1881 年农历八月初三)时,需将农历生辰换算为公历,才能对应史实时间线。本工具支持 1900 年起算,输入农历年月日,输出准确公历日期,避免“虚岁/实岁”混淆导致的年份偏差。
老照片背面常写“乙丑年腊月十五”,旧档案(如家谱、地契)多用农历纪年。本工具输入农历年号(如乙丑年)+ 月日,换算成公历日期,帮文史爱好者、家谱整理者、档案数字化人员精准标定时间。
| 维度 | 本工具 | 竞品 A(在线万年历) | 传统方法(纸质历书) |
|---|---|---|---|
| 数据隐私 | 纯浏览器计算,日期数据不上传服务器 | 需联网,查询请求发送至服务器 | 完全离线,无数据泄露风险 |
| 处理速度 | 1 秒内完成转换 | 1-3 秒(受网络延迟影响) | 数分钟至数小时(需人工翻查) |
| 离线可用 | 支持,页面加载后断网仍可转换 | 不支持,必须保持网络连接 | 支持,历书本身即是离线载体 |
| 覆盖范围 | 1900-2100 年,共 201 年 | 通常覆盖 1900-2100 年,部分更广 | 取决于历书出版年份,通常仅覆盖当年或数年 |
| 闰月处理 | 自动识别并正确转换农历闰月 | 自动识别闰月 | 需人工查阅闰月对照表,易出错 |
| 批量转换 | 不支持,每次仅转换单个日期 | 部分支持,可一次查询整月或整年 | 不支持,需逐日翻查 |
| 更新维护 | 页面加载后即固定,无需联网更新 | 依赖服务端维护,可能因改版失效 | 历书出版后即固定,无更新问题 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 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日,公历合法日期 |
输入公历 1899-01-01 或 2101-12-31输入公历 1900-01-01 到 2100-12-31 之间的日期该工具仅覆盖 1900-2100 年,超出此范围的农历转换无可靠历法数据支撑,结果无意义。
农历 2024-01-01(想表达正月初一,但用了公历月数字1)农历 2024-正月初一 或 2024-01-01(农历正月)农历月份用汉字数字(正、二、三…腊)或数字(01=正月,02=二月…12=腊月),但不可与公历月份数字混淆,否则工具无法区分输入意图。
农历 2023-02-15(想表达闰二月十五,但未标注闰)农历 2023-闰02-15 或 2023-闰二月-十五2023 年有闰二月,若不标注“闰”,工具会当作普通二月处理,输出公历日期相差约一个月。
农历 2024-01-30(正月只有29天,输入30)农历 2024-01-29(正月最后一天)农历大月30天、小月29天,正月(2024年)为小月仅29天,输入30天工具会报错或返回无效结果。
2024.1.1 或 2024/1/1 或 1/1/20242024-01-01(ISO 8601 格式:YYYY-MM-DD)工具仅接受 YYYY-MM-DD 格式,其他分隔符或顺序会被误解析或直接拒绝。
农历 2033-12-30(该年腊月只有29天)查询该年农历十二月实际天数后再输入农历闰月分布复杂(如 2033 年有闰十一月),腊月可能为小月(29天),输入30天无对应公历日期。
农历 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 年)无法转换,因农历数据表未收录。
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-01package 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-018 个高频疑问