时间日期 · 公农历

公农历转换

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

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 59 次使用
含闰月 · 干支 · 生肖 · 节气 · 1900-2100
公历日期 solar date
就绪 · 选择日期即可换算
第一节

关于本工具

About

翻旧家谱时,腊月廿三“小年”总对不上公历日期;算八字排盘,又怕闰月把生辰弄错。这个工具把1900到2100年的公历与农历(含闰月)逐日对应,输入任一历法日期,直接输出另一历法结果。农历转公历的算法依赖天文台发布的朔望月数据,而非简单查表——日期转换背后有真实的天文计算逻辑。

使用场景

生辰八字排盘

命理师接到一位甲戌年闰二月出生的客户,客户只记得公历生日是1994年3月28日。传统排盘需要先确认该年是否有闰月,再查该公历日对应的是闰二月还是三月。本工具1900-2100年覆盖所有闰月规则,输入1994-03-28,直接输出农历甲戌年二月十七,无需翻查万年历,避免因闰月归属错误导致八字日柱、时柱全盘算错。

老人寿宴定日子

家里老人坚持按农历过八十大寿,但子女都在外地工作,需要提前半年定酒店和请假。老人只记得生日是农历八月十五,但2025年中秋节对应的公历是10月6日,正好是国庆假期最后一天,返程高峰。用本工具反向查询,发现2025年农历八月十五对应公历10月6日,确认假期内,立刻锁定酒店档期,避免子女请假冲突。

跨境合同交期确认

外贸公司与德国客户签合同,交货条款写的是“收到预付款后60个自然日”,但客户打款日是2024年4月4日(清明节)。国内工厂习惯按农历安排生产,认为清明节后是淡季。用本工具确认2024年清明节是4月4日,当天打款,倒推60天是6月3日。工厂据此安排5月集中排产,避开端午假期(6月10日),确保按时出货。

古籍日期校勘

地方志编辑整理民国时期的一本账册,记载“民国二十三年正月初五,购地契一纸”。民国二十三年对应公历1934年,但正月初五究竟是1934年2月18日还是2月19日,取决于当年春节的精确日期。用本工具输入1934年,查询正月初一为2月14日,则初五为2月18日,与账册中同日记录的“立春后三日”吻合,确认校勘无误。

保险理赔年龄核实

理赔员处理一份老人身故理赔,合同约定“被保险人年满70周岁后身故,保额翻倍”。老人身份证出生日期为1953年6月15日(公历),但其子女提供的族谱记载老人出生于农历癸巳年五月初四。用本工具将1953年6月15日转为农历癸巳年五月初四,与族谱一致,确认老人实际生日为公历1953年6月15日,理赔员据此计算其70周岁节点为2023年6月15日,身故日期为2024年1月,符合翻倍条件。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「公历日期」输入框键入或点选日期(如 2025-03-15),右侧「农历日期」栏同步显示对应农历结果
  2. 2点击「农历日期」输入框,从弹出面板选农历年月日(含闰月选项),左侧「公历日期」栏即时更新
  3. 3勾选「显示节气」后,结果区下方额外列出该日所属节气(如惊蛰),未勾选则仅显示基本日期
  4. 4点结果区任意日期结果旁的「复制」图标,该日期文本自动存入剪贴板,页面顶部闪现「已复制」提示

输入输出示例

输入输出说明
2024年2月10日(公历 → 农历)甲辰年 正月初一常规:2024年春节,验证公历转农历的春节日期是否正确
1900年1月31日(公历 → 农历)庚子年 正月初一边界:工具覆盖起始日(1900年),验证1900年农历新年(庚子年正月初一)对应公历1月31日
2100年12月31日(公历 → 农历)庚申年 腊月初一边界:工具覆盖结束日(2100年),验证2100年最后一天公历转农历结果
2023年3月22日(公历 → 农历)癸卯年 闰二月 初一易错:2023年有闰二月,验证工具能否正确处理闰月并显示“闰二月”
甲辰年 正月初一(农历 → 公历)2024年2月10日常规:农历转公历,与第一条示例互逆,验证双向转换一致性
庚子年 闰四月 十五(农历 → 公历)2020年6月6日边界:2020年有闰四月,验证农历含闰月的日期转公历是否正确(闰四月十五对应公历6月6日)
2024年2月29日(公历 → 农历)甲辰年 正月二十易错:2024年是闰年,2月29日存在,验证工具对闰年2月29日的处理(非每年都有)
1900年2月28日(公历 → 农历)庚子年 正月廿九边界:1900年不是闰年,2月只有28天,验证工具对1900年2月28日的处理(1900年2月28日对应农历正月的最后一天)

常见错误对照

1.农历月份与公历月份混淆,导致闰月查询错误

✗ 错误输入农历“2023年4月”查询公历,但实际2023年农历有闰二月,4月是闰二月后的四月
✓ 修复明确区分:农历“2023年闰二月”或“2023年四月”(非闰月)

农历闰月会改变月份顺序,例如闰二月后,下一个农历月仍称“三月”而非“四月”。不区分闰月会导致公历日期偏移一个月。

2.公历转农历时,输入了不存在的日期(如2月30日)

✗ 错误输入公历“2023-02-30”进行转换
✓ 修复输入“2023-02-28”或“2023-03-01”

公历2月只有28或29天,30日不存在。工具不会自动修正,直接报错或返回无效结果。

3.农历日期输入格式错误,缺少“年”或“月”

✗ 错误输入“2023-正月初一”或“正月初一2023”
✓ 修复输入“2023年正月初一”或“2023-01-01”(农历)

工具要求农历输入必须包含“年”字段,且顺序固定(年+月+日)。缺少年份或顺序颠倒会导致解析失败。

4.公历转农历时,输入了1900年之前的日期

✗ 错误输入公历“1899-12-31”
✓ 修复输入“1900-01-01”或之后的日期

工具仅覆盖1900-2100年,超出范围的日期无对应农历数据,会返回空或错误。

5.农历转公历时,输入了不存在的农历日期(如闰正月)

✗ 错误输入农历“2023年闰正月十五”
✓ 修复输入“2023年正月十五”或“2023年闰二月十五”

农历闰月只出现在特定月份(如2023年闰二月),并非每个月都有闰月。查询不存在的闰月会导致无结果。

6.将公历日期误当作农历日期输入

✗ 错误想查2023年春节的公历日期,却输入公历“2023-01-22”进行转换
✓ 修复选择“农历→公历”方向,输入“2023年正月初一”

工具默认双向转换,但方向选错会导致结果相反。春节是农历正月初一,应使用农历转公历功能。

7.农历月份使用数字而非中文,导致解析歧义

✗ 错误输入“2023年1月1日”意图表示农历正月初一
✓ 修复输入“2023年正月初一”或“2023年01月01日”(农历)

工具农历月份必须用中文(正月、二月…腊月),数字“1月”会被误判为公历1月,导致转换结果错误。

8.公历转农历时,输入了闰年2月29日但当年不是闰年

✗ 错误输入公历“2023-02-29”
✓ 修复输入“2023-02-28”或“2024-02-29”

2023年不是闰年,2月只有28天。输入不存在的日期会直接报错。

第三节

工作原理

How It Works

核心公式

农历日序 = (公历日 - 1900-01-31 的差值天数) - 农历年起始偏移 + 1

变量说明

  • 公历日待转换的公历日期,如 2025-03-15
  • 差值天数公历日与 1900-01-31 相差的天数
  • 农历年起始偏移该农历年正月初一对应的差值天数

示例

公历 2025-03-15 转农历:1900-01-31 到 2025-03-15 差值天数为 45717 天;2025 年农历正月初一对应差值天数 45696 天;农历日序 = 45717 - 45696 + 1 = 22,即农历二月廿二(2025 年闰六月,该日属二月)。

输入公历/农历年月日+选项解析与校验范围/格式/闰月查天文表1900-2100 历谱转换计算闰月判断置闰规则干支/生肖辅助信息输出结果
输入/输出节点 逻辑处理 数据查询
第四节

开发者集成

For Developers

4 种主流语言实现,复制即用:

import datetime from lunardate import LunarDate # 公历转农历 solar = datetime.date(2024, 10, 1) lunar = LunarDate.fromSolarDate(solar.year, solar.month, solar.day) print(f"{solar} → 农历{lunar.year}年{lunar.month}月{lunar.day}日") # 例: 2024-10-01 → 农历2024年8月29日 # 农历转公历(含闰月:闰六月用 isleap=True) lunar = LunarDate(2024, 6, 1, isleap=True) solar = lunar.toSolarDate() print(f"农历2024年闰六月初一 → {solar}") # 例: 2024-07-26
const { Solar, Lunar } = require('lunar-javascript'); // 公历转农历 const solar = Solar.fromYmd(2024, 10, 1); const lunar = solar.getLunar(); console.log(`${solar.toFullString()} → ${lunar.toFullString()}`); // 例: 2024-10-01 → 二〇二四年八月廿九 // 农历转公历(含闰月:getLunar 自动识别闰月) const lunar2 = Lunar.fromYmd(2024, 6, 1, true); // 第四个参数 true 表示闰月 console.log(`农历2024年闰六月初一 → ${lunar2.getSolar().toFullString()}`); // 例: 2024-07-26
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) // 例: 2024-10-01 → 农历2024年8月29日 // 农历转公历(含闰月:isleap 传 true) solar2 := solarlunar.LunarToSolar(2024, 6, 1, true) fmt.Printf("农历2024年闰六月初一 → %s\n", solar2.Format("2006-01-02")) // 例: 2024-07-26 }
#!/bin/bash # 依赖: lunar-date (npm 包,需先安装: npm install -g lunar-date) # 公历转农历 lunar-date --solar 2024-10-01 # 输出: 2024-08-29 (农历) # 农历转公历(含闰月:--leap 标记) lunar-date --lunar 2024-6-1 --leap # 输出: 2024-07-26
第五节

常见问题

Q & A
能不能查2000年以前的农历生日?

可以。本工具覆盖1900年至2100年,含闰月,完全包含2000年以前的所有日期。输入公历日期即可得到对应农历,或输入农历日期(需注明是否闰月)转公历。注意:1900年以前的农历数据因历法推算方式不同,本工具不覆盖,请勿输入。

我输入农历闰四月,它给我转成了公历六月,这是对的吗?

对。农历闰月(如闰四月)在公历中对应的是同月偏后的日期,通常落在公历五月下旬到六月之间。本工具后端算法已处理闰月逻辑,你只需在输入时选择正确的农历月份(如“四月”或“闰四月”),结果即准确。如果不确定当年是否有闰月,可先查当年农历月份列表。

为什么我用别的网站查同一个农历日期,转出来的公历差了一天?

差一天常见原因是农历日期的“夜子时”或“早子时”归属差异。部分老旧算法以23:00为日界,而本工具按现代历法标准以0:00为日界。另外,不同工具对1900-2100年间的历法数据版本(如紫金山天文台历谱 vs 民间历法)也可能导致极个别日期(如1984年前后)差一天。本工具采用公开天文历算数据,与主流历书对齐。

农历转公历,我直接输“二〇二三年正月初一”行不行?

不行。输入框只接受数字形式:年份用四位数字(如2023),月份用数字(1-12,闰月需单独勾选或选择“闰X月”),日期用数字(1-30)。不接受中文数字(如“二〇二三”)或大写汉字。如果手头只有中文日期,请先转换为数字再输入。

这个工具需要联网吗?我的数据会不会上传?

本工具是BE实现,每次转换需要将你输入的日期发送到后端服务器进行计算,然后返回结果。所以必须联网。转换过程中,仅传输日期数字(年、月、日、闰月标记),不涉及你的姓名、IP、设备信息。服务器不存储转换记录,转换完毕后即丢弃。

我查1949年10月1日的农历,它给我说对应八月初十,对吗?

正确。1949年10月1日(公历)确实对应农历己丑年八月初十。这是公开历史日期,本工具数据与《中国历法总表》一致。你可以用这个日期验证工具准确性:输入公历1949-10-01,农历结果应为八月初十;反过来输入农历1949-08-10,公历结果应为1949-10-01。

为什么我查今年中秋节的公历日期,跟日历App上不一样?

首先确认你查询的农历日期是否正确:中秋节是农历八月十五。如果输入正确但结果与App不符,可能是App使用了不同版本的历法数据(如某些App基于清代《时宪历》,而本工具基于现代天文推算)。另外,极少数年份(如2020年)因闰四月导致中秋节公历日期在十月,与常理认知不同,但历法准确。建议以国家天文台或紫金山天文台发布的官方数据为准。

我一次要查一百个日期,能不能批量转换?

目前不支持批量导入或批量粘贴。每次只能输入一个日期进行转换。如果确实需要批量处理,建议逐一输入并手动记录结果。未来版本可能会考虑加入批量功能,但当前无此计划。对于少量日期(如10个以内),逐个转换并不慢。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭