工具库 · 开放接口

万年历 API · 干支查算

以公历日期即时换算农历、日干支、四柱与值日太岁日君。 供会员在自有小程序 / 应用中调用。全部为古代干支纪日传统文化与仙侠文学创作语境下的意象数据,不作吉凶祸福之断。

本接口仅 VIP 会员 可用。请先 登录 或 开通会员。

使用的历法算法 · 可准确推算的时间范围

农历换算

公元 1900 – 2100 采用权威农历历法数据表(口径与紫金山天文台农历公告一致,春节、大小月、闰月逐日对照校验)。 表外年份 采用天文历法算法:以朔望月(Meeus 新月公式,UTC+8 民用日)定每月初一,以太阳黄经十二中气定月号,沿用传统「无中气置闰」法,故全年份可连续准确推算。

四柱干支

按传统标准:年柱以立春为界换年、月柱随节气换月(五虎遁起月)、日柱以 23:00(晚子时)换日、时柱按真太阳时并加经度修正,依五鼠遁起时。日干支、值日太岁日君以六十甲子循环推出。

可推算范围

公历 公元 1 年 1 月 1 日 至 9999 年 12 月 31 日, 均可给出农历、日干支、四柱与值日太岁日君;范围内连续、无日期断层。
其中公元 1 年 1 月 1 日起至当年春节前,农历仍在上一农历年内,故农历纪年显示为 公元前1年(例如 0001-01-01 为「公元前1年冬月廿一」)—— 年份采用天文纪年,天文纪年 0 年即公元前 1 年。

接口说明

请求地址

GET /api/wannianli/query

请求参数

两组输入二选一:传 date(公历),或传 lunar_year(农历,此时忽略 date);其余参数均可选。

date公历日期

公历日期,格式 YYYY-MM-DD(公历模式,与农历字段二选一)

lunar_yearlunar_monthlunar_daylunar_leap农历日期

农历输入:只要 lunar_year 有值即为农历模式(此时忽略 date)。lunar_leap 用 0/1 标识该农历月是否闰月。lunar_year 取 0-9999,其中 0 表示公元前 1 年(天文纪年 0 年),与返回值里的 lunarYear 一一对应、可互逆

hour出生钟点

传具体钟点 HH:MM(如 04:30)时,会结合出生地经度做真太阳时修正并推精确时柱;传时辰地支名(如 午)时按该时辰直接取时柱、不做经度修正;留空或传非法值(如 25:00、不清楚)视为时辰不详,bazi.hour.name 返回 ??

lon出生地

出生地经度(东经),用于真太阳时修正。需与 hour 的具体钟点配合才生效。注意:手填经度不含国家信息,出生地时区由经纬度就近推断,若出生地时区与所在经度不匹配(如中国西部统一用北京时间),建议改用 region_code

region出生地

出生地城市名(如「杭州」),由系统自动换算为经度;若同时传入 lon 则以 lon 为准

province出生地

出生地省份全名(可与 region 搭配,城市按省限定避免同名歧义);只传 province 时按该省省会经度默认

region_code推荐

出生地地区统一编号(强烈推荐),形如 CN-00246(中国·湖南省·张家界市)。纯 ASCII、免中文 URL 编码、免同名歧义,一个参数即锁定全球任意最小单位地区。优先级最高,覆盖 lon / province / region。格式容错:大小写、有无横线、前导零均可(cn246 = CN-00246)。编号表见下方「地区编号对照表」

在线调试

输入方式
按出生地当地钟表时间填,不必换成北京时间

在线调试同样计入今日额度,每次调用消耗 1 次。

返回字段与调用示例

返回字段(data)

auth鉴权

本次鉴权方式:session(登录会话)或 api_key(API 密钥)

modeinput

输入方式(solar|lunar)与输入原值(公历为日期串,农历为 lunar_* 对象)

dateweek

公历日期与中文星期(农历模式下 date 为换算结果)

lunar农历

农历信息,字段为 lunarYear / lunarMonth / lunarDay(数字)、isLeap(是否闰月)、lunarMonthCn / lunarDayCn(中文月、日)、lunarYearCn / lunarFullCn(中文纪年与完整表述,如「2026年」「2026年八月初九」)、zodiac(生肖)。lunarYear 为天文纪年:公元 1 年为 1,公元前 1 年为 0,此时中文表述为 公元前1年(不会出现「0年」)

bazi四柱

四柱(年 / 月 / 日 / 时),每柱含 gan / zhi(序号)与 name(干支名)。时辰不详时 hour.gan / hour.zhi 为 -1、hour.name 为 ??

duty日君

值日太岁日君(如:甲子|金辨日君)

lonlonFrom

本次解析到的经度及其来源(region = 按地区解析 / manual = 手填 / none = 未提供)。注意:只有 hour 传了具体钟点(HH:MM)时该经度才真正参与真太阳时修正;只传地支名或留空时它只作回显、不参与计算

region出生地

解析出的出生地,含 code(地区统一编号)、province、name、lon、lat;未按地区解析时为 null。调用方可用返回的 code 核对地区是否与预期一致(用 province + region 汉字解析时 code 为空字符串,属正常)

usedlimitremain额度

今日已用 / 上限 / 剩余次数

disclaimer

强制免责声明文本

错误码

400参数无效

date 格式非法 / 该农历日期不存在 / region_code 无效或查无此编号(具体原因写在 msg 里)。本接口不返回 error 字段;bad_code_format / region_not_found / missing_param 这组细分值是 /api/region/lookup 的返回字段(见下方「地区编号对照表」)

401未登录

未携带会话 Cookie 或有效 API 密钥

403无权限

非 VIP 会员(或 API 密钥配置了 IP 白名单而来源 IP 不在名单内)

429超额

今日额度已用完

调用示例(curl · API 密钥免登录,按地区选出生地)

推荐写法:出生地只传地区统一编号 region_code,一个纯 ASCII 参数即锁定全球任意最小单位地区,免中文编码、免同名歧义。例:CN-00246 = 中国·湖南省·张家界市、CN-00001 = 中国·上海市·上海市。传了 region_code 就不必再传 province / region / lon。

curl -G "https://www.yuanka.com.cn/api/wannianli/query" \
  --data-urlencode "date=2026-09-19" \
  --data-urlencode "hour=04:30" \
  --data-urlencode "region_code=CN-00246" \
  -H "Authorization: Bearer <你的API密钥>"

若要按汉字省名 / 市名调用(province + region),请确保终端编码为 UTF-8(Linux / macOS / Git Bash 等):Windows 传统 cmd 默认 GBK 代码页,中文参数会编码错乱并静默失效——接口照样返回 code=0,但 data.lon 为 null、地区未生效,真太阳时不会修正。另外 cmd 的续行符是 ^ 而不是 \,请把命令写成一行,否则参数会被吞掉、-H 请求头可能一起失效(表现为误报 401 请先登录)。这类环境请直接用上面的 region_code。

curl -G "https://www.yuanka.com.cn/api/wannianli/query" \
  --data-urlencode "date=2026-09-19" \
  --data-urlencode "hour=04:30" \
  --data-urlencode "province=浙江省" \
  --data-urlencode "region=杭州市" \
  -H "Authorization: Bearer <你的API密钥>"

地区编号对照表(免费下载,无需鉴权)

编号格式 {两位国家码}-{5位序号},全球共 48390 个最小单位地区,已全部编号。
用法:用城市名在表里查出编号 → 把编号填进 API 的 region_code → 结果比传汉字更准确(无编码问题、无同名歧义)。
表不会频繁变动;若城市库有增补,编号保持不变,仅追加新行并同步更新此文件。

也可按国家取子集:GET /api/region/codes?cc=CN(format=csv|txt|json,默认 json); 按编号反查:GET /api/region/lookup?code=CN-00246(编号格式错、或格式对但查无此编号,均返回 400,用响应体里的 error 字段区分:bad_code_format / region_not_found); 查某省下的城市(含编号):GET /api/region/towns?cc=CN&admin=湖南省。

返回结果示例(真实响应 · 杭州 CN-00219 2026-09-19 04:30;其中 used / limit / remain 为示意值)

{
  "code": 0,
  "data": {
    "auth": "api_key",
    "mode": "solar",
    "input": "2026-09-19",
    "date": "2026-09-19",
    "week": "周六",
    "lunar": {
      "lunarYear": 2026, "lunarMonth": 8, "lunarDay": 9, "isLeap": false,
      "lunarMonthCn": "八月", "lunarDayCn": "初九",
      "lunarYearCn": "2026年",
      "lunarFullCn": "2026年八月初九", "zodiac": "马"
    },
    "bazi": {
      "year":  { "gan": 2, "zhi": 6, "name": "丙午" },
      "month": { "gan": 3, "zhi": 9, "name": "丁酉" },
      "day":   { "gan": 2, "zhi": 8, "name": "丙申" },
      "hour":  { "gan": 6, "zhi": 2, "name": "庚寅" }
    },
    "lon": 120.16, "lonFrom": "region",
    "region": { "code": "CN-00219", "province": "浙江省", "name": "杭州市", "lon": 120.16, "lat": 30.29 },
    "duty": "丙申|管仲日君",
    "used": 10, "limit": 500, "remain": 490,
    "disclaimer": "以上干支历法信息仅为古代干支纪日传统文化与仙侠文学创作语境下的意象参考,不作吉凶祸福之实际判定。"
  }
}

示例按「2026-09-19 04:30 出生于浙江省 杭州市」换算:hour 传具体钟点(HH:MM)才触发真太阳时修正;出生地可传 region_code=CN-00219(推荐,等价于杭州),也可传 province + region 汉字由系统换算,或只传 province 按该省省会默认,或用 lon 手填经度。注意:手填经度不含国家信息,出生地时区由经纬度就近推断,中国西部这类「时区与经度并不对应」的出生地建议仍用 region_code。(优先级:region_code → lon → province+region)。若仍要用汉字,推荐 --data-urlencode 方式;curl 对 URL 里直接写中文可能报 Bad hostname,请用 -G --data-urlencode 形式或百分号编码——这也是改用地区编号的原因之一。亦可在 api_key 查询参数里传密钥:

curl -G "https://www.yuanka.com.cn/api/wannianli/query" \
  --data-urlencode "date=2026-09-19" \
  --data-urlencode "hour=04:30" \
  --data-urlencode "province=浙江省" \
  --data-urlencode "region=杭州市" \
  --data-urlencode "api_key=<你的API密钥>"

调用示例(curl · 登录会话,手填经度)

curl -b "YCGSESSID=你的会话" \
  "https://www.yuanka.com.cn/api/wannianli/query?date=2026-09-19&hour=04:30&lon=120.16"

农历调用示例(2023 闰二月初一,只传省份按省会默认)

curl -G "https://www.yuanka.com.cn/api/wannianli/query" \
  --data-urlencode "lunar_year=2023" \
  --data-urlencode "lunar_month=2" \
  --data-urlencode "lunar_day=1" \
  --data-urlencode "lunar_leap=1" \
  --data-urlencode "hour=04:30" \
  --data-urlencode "province=广东省" \
  -H "Authorization: Bearer <你的API密钥>"

使用提示:① 想得到结合出生地精确的时柱,hour 务必传具体钟点(HH:MM,24 小时制);只传 午 这类时辰名时按该时辰直接取时柱、不做经度修正;留空或传非法值时 bazi.hour.name 返回 ??(时辰不详)。② 出生地优先级 region_code → lon → province+region,推荐传 region_code(地区统一编号,纯 ASCII、覆盖全球城市、免中文编码与同名歧义,编号表可下载);或传 province + region(系统查城市经度,province 用于同名消歧,只传 province 按省会默认);lon 手填经度请慎用——它不含国家信息,出生地时区要由经纬度就近推断,中国西部这类「时区与经度并不对应」的出生地会算错时柱。同时传入时以优先级高者为准。③ 返回 data.bazi 的四柱即经真太阳时校正后结果;建议核对 data.region.code 是否等于你传入的编号(用 province+region 汉字解析时 code 为空字符串,属正常),以确认地区解析无误。④ 传了 region_code 却查无此编号会直接返回 400,不会静默按别处计算。

鉴权:① 会话方式(须以登录会员的会话 Cookie 调用);② API 密钥方式(免登录,密钥需在会员中心生成,可按 IP 白名单限制来源,若配置了白名单则仅允许白名单内的来源 IP 调用)。两种方式均计入当日额度,超额返回 429;配置了白名单的密钥若来源 IP 不在名单内,返回 403。

以上干支历法信息仅为古代干支纪日传统文化与仙侠文学创作语境下的意象参考,不作吉凶祸福之实际判定。 请勿用于任何现实中的决策依据。