from lunarcalendar.converter import Solar, Lunar
from datetime import datetime
# 定义小六壬的六宫名称
palaces = ["大安", "留连", "速喜", "赤口", "小吉", "空亡"]
# 定义月、日、时的口诀
oracles = {
"大安": "大安:身不动时,属木,青龙,方位东,凡事主逢1、5、7。大安事事昌,求财在坤方,失物去不远,宅舍保安康",
"留连": "留连:人未归时,属水,玄武,方位北,凡事主逢2、8、10。留连事难成,求谋日未明,官事只宜缓,去者未回程",
"速喜": "速喜:人即至时,属火,朱雀,方位南,凡事主逢3、6、9。速喜喜来临,求财向南行,失物申午未,逢人路上寻",
"赤口": "赤口:官事凶时,属金,白虎,方位西,凡事主逢4、7、10。赤口主口舌,是非要紧防,失物速速讨,行人有惊慌",
"小吉": "小吉:人来喜时,属木,六合,凡事主逢1、5、7。小吉最吉昌,路上好商量,阴人来报喜,失物在坤方",
"空亡": "空亡:音信稀时,属土,勾陈,方位中,凡事主逢3、6、9。空亡事不祥,阴人少乖张,求财无利益,行人有灾殃"
}
# 定义组合口诀
combined_oracles = {
"大安加留连": "大安加留连,办事不周全,失物西北去,婚姻晚几天",
"大安加速喜": "大安加速喜,事事自己起,失物当日见,婚姻自己提",
"大安加赤口": "大安加赤口,办事不顺手,失物不用找,婚姻两分手",
"大安加小吉": "大安加小吉,事事从己及,失物不出门,婚姻成就地",
"大安加空亡": "大安加空亡,病人要上床,失物无踪影,事事不顺情",
"留连加大安": "留连加大安,办事两分张,婚姻有喜事,先苦后来甜",
"留连加速喜": "留连加速喜,事事由自己,婚姻有成意,失物三天里",
"留连加赤口": "留连加赤口,病者死人口,失物准丢失,婚姻两分手",
"留连加小吉": "留连加小吉,事事不用提,失物东南去,病者出人齐",
"留连加空亡": "留连加空亡,病人准死亡,失物不见面,婚姻两分张",
"速喜加赤口": "速喜加赤口,自己往外走,失物往正北,婚姻得勤走",
"速喜加小吉": "速喜加小吉,婚姻有人提,病人当天好,时物在家里",
"速喜加空亡": "速喜加空亡,婚姻有分张,病者积极治,失物不久见",
"速喜加大安": "速喜加大安,事事都平安,姻姻成全了,占病都相安",
"速喜加留连": "速喜加留连,婚姻不可言,失物无信息,病人有仙缘",
"赤口加小吉": "赤口加小吉,办事自己提,婚姻不能成,失物无信息",
"赤口加空亡": "赤口加空亡,无病也上床,失物不用找,婚姻不能成",
"赤口加大安": "赤口加大安,办事险和难,失物东北找,婚姻指定难",
"赤口加留连": "赤口加留连,办事有困难,行人在外走,失物不回还",
"赤口加速喜": "赤口加速喜,婚姻在自己,失物有着落,办事官事起",
"小吉加空亡": "小吉加空亡,病人不妥当,失物正东找,婚姻再想想",
"小吉加大安": "小吉加大安,事事两周全,婚姻当日定,失物自己损",
"小吉加留连": "小吉加留连,事事有反还,婚姻有人破,失物上西南",
"小吉加速喜": "小吉加速喜,事事从头起,婚姻能成就,失物在院里",
"小吉加赤口": "小吉加赤口,办事往外走,婚姻有难处,失物丢了手",
"空亡加大安": "空亡加大安,事事不周全,婚姻从和好,失物反复间",
"空亡加留连": "空亡加留连,办事处处难,婚姻重新定,失物永不还",
"空亡加速喜": "空亡加速喜,事事怨自己,婚姻有一定,失物在家里",
"空亡加赤口": "空亡加赤口,办事官非有,婚姻难定准,失物往远走",
"空亡加小吉": "空亡加小吉,事事有猜疑,婚姻有喜事,失物回家里"
}
def get_lunar_date(solar_date):
"""将公历日期转换为农历日期"""
lunar = Lunar.from_date(solar_date)
return lunar.month, lunar.day
def calculate_palace(start_index, step):
"""根据起始索引和步数计算六宫名称"""
index = (start_index + step - 1) % 6
return palaces[index]
def get_hour_index(hour):
"""将时辰转换为对应的数字"""
hour_map = {
"子时": 1, "丑时": 2, "寅时": 3, "卯时": 4,
"辰时": 5, "巳时": 6, "午时": 7, "未时": 8,
"申时": 9, "酉时": 10, "戌时": 11, "亥时": 12
}
if hour >= 23 or hour < 1:
return hour_map["子时"]
elif 1 <= hour < 3:
return hour_map["丑时"]
elif 3 <= hour < 5:
return hour_map["寅时"]
elif 5 <= hour < 7:
return hour_map["卯时"]
elif 7 <= hour < 9:
return hour_map["辰时"]
elif 9 <= hour < 11:
return hour_map["巳时"]
elif 11 <= hour < 13:
return hour_map["午时"]
elif 13 <= hour < 15:
return hour_map["未时"]
elif 15 <= hour < 17:
return hour_map["申时"]
elif 17 <= hour < 19:
return hour_map["酉时"]
elif 19 <= hour < 21:
return hour_map["戌时"]
else:
return hour_map["亥时"]
def main():
# 获取当前公历日期和时间
now = datetime.now()
print(f"当前公历日期和时间: {now}")
# 获取农历日期
lunar_month, lunar_day = get_lunar_date(now)
print(f"当前农历日期: {lunar_month}月{lunar_day}日")
# 获取当前时辰
current_hour = now.hour
hour_index = get_hour_index(current_hour)
print(f"当前时辰: {hour_index}")
# 计算月、日、时对应的六宫名称
start_index = 0 # 从大安开始
month_palace = calculate_palace(start_index, lunar_month)
day_palace = calculate_palace(palaces.index(month_palace), lunar_day)
time_palace = calculate_palace(palaces.index(day_palace), hour_index)
print(f"月对应的六宫名称: {month_palace}")
print(f"日对应的六宫名称: {day_palace}")
print(f"时对应的六宫名称: {time_palace}")
# 输出月、日、时对应的口诀
print(f"月对应的口诀: {oracles.get(month_palace, '未知口诀')}")
print(f"日对应的口诀: {oracles.get(day_palace, '未知口诀')}")
print(f"时对应的口诀: {oracles.get(time_palace, '未知口诀')}")
# 如果日和时对应的宫位相同,输出组合口诀
if day_palace == time_palace:
combined_key = f"{day_palace}加{time_palace}"
print(f"组合口诀: {combined_oracles.get(combined_key, '未知组合口诀')}")
else:
combined_key = f"{day_palace}加{time_palace}"
print(f"组合口诀: {combined_oracles.get(combined_key, '未知组合口诀')}")
input("点击任意按钮退出...")
if __name__ == "__main__":
main()