config.py•2.46 kB
# -*- coding: utf-8 -*-
"""
六壬MCP工具配置文件
包含节气、农历、干支等计算功能
"""
import sys
from sxtwl import fromSolar
# 节气名称映射
SOLAR_TERMS = [
"小寒", "大寒", "立春", "雨水", "惊蛰", "春分",
"清明", "谷雨", "立夏", "小满", "芒种", "夏至",
"小暑", "大暑", "立秋", "处暑", "白露", "秋分",
"寒露", "霜降", "立冬", "小雪", "大雪", "冬至"
]
# 天干
HEAVENLY_STEMS = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
# 地支
EARTHLY_BRANCHES = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
# 农历月份名称
LUNAR_MONTHS = ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"]
def get_solar_term(year: int, month: int, day: int) -> str:
"""获取指定日期的节气"""
try:
solar = fromSolar(year, month, day)
# 获取节气索引
jq_index = solar.getJieQi()
if jq_index >= 0 and jq_index < len(SOLAR_TERMS):
return SOLAR_TERMS[jq_index]
else:
# 如果获取不到节气,使用默认节气
return "立春"
except Exception as e:
print(f"获取节气失败: {e}", file=sys.stderr)
return "立春"
def get_lunar_month(year: int, month: int, day: int) -> str:
"""获取农历月份"""
try:
solar = fromSolar(year, month, day)
lunar_month = solar.getLunarMonth()
return LUNAR_MONTHS[lunar_month - 1]
except Exception as e:
print(f"获取农历月份失败: {e}", file=sys.stderr)
return "正"
def get_ganzhi(year: int, month: int, day: int, hour: int) -> tuple[str, str]:
"""获取日干支和时干支"""
try:
solar = fromSolar(year, month, day)
# 获取日干支
day_gz = solar.getDayGZ()
day_gan = HEAVENLY_STEMS[day_gz.tg]
day_zhi = EARTHLY_BRANCHES[day_gz.dz]
# 获取时干支 (需要根据小时计算)
hour_gz = solar.getHourGZ(hour)
hour_gan = HEAVENLY_STEMS[hour_gz.tg]
hour_zhi = EARTHLY_BRANCHES[hour_gz.dz]
return f"{day_gan}{day_zhi}", f"{hour_gan}{hour_zhi}"
except Exception as e:
print(f"获取干支失败: {e}", file=sys.stderr)
return "甲子", "甲子"
# 默认配置常量
DEFAULT_SOLAR_TERM = "立春"
DEFAULT_LUNAR_MONTH = "正"
DEFAULT_GANZHI = ("甲子", "甲子")