生肖与生辰八字
Overview
把「出生日期 + 时辰」换算成干支历四柱,并给出可解读的结构化命理要素。
所有换算由脚本确定性完成(scripts/bazi.py,仅依赖 Python 标准库,1900-2100 年);
所有解读由助手基于 references/interpretation.md 撰写。
核心原则:算得准、说得清、留得住边界——换算规则透明,命理结论一律定位为传统文化与娱乐参考。
何时使用
- 用户报出生日期问「我属什么」「我八字是什么」「五行缺什么」「身强还是身弱」
- 用户给出农历生日、闰月生日,需要换算或排盘
- 用户想知道出生地带来的真太阳时校正、子时归属、立春前后属相
- 用户给定性别要排大运、问起运时间
- 用户要一份带性格与运势倾向的八字解读
不使用:医疗、法律、投资、生育、寿命、改名改运等决定性咨询(见「内容边界」)。
使用步骤
1. 收集信息(缺什么问什么,不要一次性盘问)
必需:出生日期(公历或农历,农历需确认是否闰月)、出生时间(时辰)、性别(排大运需要)。
可选:出生地(用于真太阳时校正,内置 90+ 城市,也可用 --longitude 给经度)。
用户给的信息不完整时:
- 缺时辰 → 先问;用户确实不知,用 --no-hour 只排三柱,并说明年/月柱按当日 12:00 推定。
- 缺出生地 → 直接排盘,说明未做真太阳时校正;若用户在外地出生再补算。
- 日期在 1900 年前或 2100 年后 → 明确告知超出数据范围。
2. 运行脚本
python scripts/bazi.py --date 1990-05-20 --time 14:30 --gender 男 --place 北京
python scripts/bazi.py --lunar-date 2023-02-15 --leap-month --time 08:05 --gender 女 --place 乌鲁木齐
python scripts/bazi.py --date 2024-02-04 --time 16:30 --json # 需要结构化数据时
python scripts/bazi.py --self-test # 改动脚本后自检
运行环境:使用受管 Python(C:\Users\86173\.workbuddy\binaries\python\versions\3.13.12\python.exe),
脚本只用标准库,无需安装依赖。
3. 校对输入再输出
重点复核三类容易出错的情形,并在回答中说明:
- 交界日:出生在立春、节气交接当天 → 提示年/月柱随时辰可能改变,给出两种结果。
- 子时(23:00-01:00):三派并存,默认
23h(23:00 换日、日柱次日、时干用次日日干);
night(日柱仍当日、时干用次日日干,与常见命理库一致)、0h(全部按当日)。
出生在 23:00-24:00 时,把23h与night两种结果都列出并说明差异,
不要只给一种。 - 偏远经度:新疆、西藏等地真太阳时校正可达 2 小时,可能改变时柱甚至日柱,需要说明校正量。
4. 撰写解读
以脚本输出为事实底稿,按 references/interpretation.md 的结构写:
排盘事实 → 性格倾向 → 运势倾向 → 一句日常调和习惯 → 免责声明。
用词用「倾向」「更容易」「通常」,不用「必然」「一定」「命中注定」。
5. 每次都带免责声明
声明内容属中国传统文化与民俗娱乐参考,不构成医疗、法律、投资、职业等任何决定性建议。
脚本参数
| 参数 | 说明 |
|---|---|
--date YYYY-MM-DD |
公历出生日期(与 --lunar-date 二选一) |
--lunar-date YYYY-MM-DD |
农历出生日期,配 --leap-month 表示闰月 |
--time HH:MM |
出生时间(当地钟表时间,默认北京时间) |
--no-hour |
时辰未知,只排年、月、日三柱 |
--gender 男/女 |
排大运需要 |
--place 城市名 |
内置城市经度,支持模糊匹配 |
--longitude 度数 |
直接给东经度数,覆盖 --place |
--tz-offset 小时 |
输入时间的时区偏移,默认 8(北京时间) |
--zishi-mode 23h/night/0h |
子时换日口径,默认 23h(另两派见下) |
--no-correction |
不做真太阳时校正 |
--json |
输出 JSON |
--self-test |
内置自检(日柱锚点、立春分界、子时、农历往返、错误处理) |
换算规则要点(详见 references/ganzhi_rules.md)
- 年柱:以立春为界(不是正月初一);生肖同理。干支年 N:天干 (N-4)%10、地支 (N-4)%12。
- 月柱:以十二节为界(立春、惊蛰、清明……大雪),中气不换月;月干按五虎遁。
- 日柱:儒略日数公式
(JDN + 49) % 60;23:00 换日(夜子时归次日,时柱用次日日干)。 - 时柱:真太阳时所属时辰,时干按五鼠遁。
- 真太阳时:
当地时间 + (经度 − 15×时区) × 4 分钟 + 均时差。
年柱/月柱/大运按绝对时刻比对节气;日柱/时柱按真太阳时。 - 大运:阳年男、阴年女顺行,其余逆行;三天折一岁;以月柱为起点顺/逆推六十甲子。
- 数据:节气表由 astropy 视黄经求解并与 pyephem、公开天文年历交叉校验(分钟级一致);
农历表由权威农历库导出并做往返校验。
示例对话
> 用户:我 1990 年 5 月 20 日下午 2 点半出生,男,北京人,帮我看看八字
- 运行
--date 1990-05-20 --time 14:30 --gender 男 --place 北京 - 得到:庚午 辛巳 乙酉 癸未,属马,真太阳时 14:19(校正 −10.6 分钟),
五行金 3 火 2 木 1 土 1 水 1,日主乙木中和(0.50),5 年 7 个月起运顺行 - 按
references/interpretation.md写性格与运势倾向 - 附免责声明
> 用户:我农历 2023 年闰二月十五早上生的,新疆乌鲁木齐,女孩
- 运行
--lunar-date 2023-02-15 --leap-month --time 08:05 --gender 女 --place 乌鲁木齐 - 换算为公历 2023-04-05,真太阳时 05:52(校正 −132.6 分钟)→ 卯时
- 说明:新疆真太阳时比北京时间晚约 2 小时,时柱因此落在卯时而非辰时
> 用户:2024 年 2 月 4 日出生到底属龙还是属兔?
- 先问时辰(立春当日 16:27 分界)
- 分界前属兔、分界后属龙,两种结果都给出
错误处理(脚本已内置,助手只需转述)
- 日期超出 1900-2100 → 明确提示范围限制
- 日期格式错误或日期不存在 → 提示正确格式
YYYY-MM-DD - 缺时辰 → 提示补时辰或用
--no-hour - 时辰越界(如 25:00)→ 提示 00:00-23:59
- 闰月不存在(如 2024 年闰三月)→ 提示该年真实闰月或没有闰月
- 农历日数越界(如 29 天的小月填 30)→ 提示该月实际天数
- 出生地无法识别 → 提示改用
--longitude
内容边界(强制)
- 命理内容一律定位为传统文化与娱乐参考,不作科学结论与专业建议。
- 不输出医疗、法律、投资、职业录用、生育、寿命、婚配定论、改名改运等决定性建议;
用户追问时说明超出范围并引导专业人士。 - 用户情绪低落或提及自伤时,不做命理分析,优先同理并建议专业援助。
- 为第三人算命前提醒取得对方同意;不主动索要身份证号等敏感信息。
文件清单
scripts/bazi.py—— 主计算脚本(CLI,标准库)scripts/data/solar_terms.txt—— 1899-2101 年 24 节气时刻(北京时间,分钟)scripts/data/lunar.txt—— 1900-2101 年农历数据(春节日期、闰月、月大月小)scripts/tools/—— 数据生成脚本(需 astropy / lunarcalendar,仅扩充年份范围时用)references/ganzhi_rules.md—— 完整换算规则、流派差异、数据精度说明references/interpretation.md—— 十神含义、日主性格模板、运势写法、强制边界