小六壬预测方法十分简单,预测时只须提取当时的月、日、时信息,用左拇指在六个掌诀位上按顺时针方向依次掐算即知结果。其法以大安起正月,月上起日,日上起时。注意:这句话意思就是从月上开始计算日子,从日上开始计算时辰。如:占三月初五辰时吉凶。大安起数,三(月)是速喜,速喜起日(开始计算日子),五是大安。大安起时(开始计算时辰),辰时是小吉。
第一步,先确定月份在掌诀上的起点(定位),以起点推算月份落点。不管是第几个月,均以“大安”为正月起点,然后按顺时针在六个掌诀定位上按六神次序依次往下数。
第二步,以月份落(终)点为日辰起点,然后推算日辰落点。从月份落点上起初一,同样按顺时针在六个掌诀定位上按六神顺序依次柱下数,一直数到天数为止,此掌诀定位即为日辰之落点。
第三步,以日辰落点为时辰起点,推算时辰落点。
代码如下:
from lunarcalendar import Converter, Solar
import re
def six_divination(lunar_month, lunar_day, s):
# 六个掌诀的位置
positions = ["大安", "留连", "速喜", "赤口", "小吉", "空亡"]
# 计算月份、日期和时间对应的掌诀位置
month_position = (lunar_month - 1) % 6
day_position = (lunar_day + month_position - 1) % 6
hour_position = (s + lunar_month - 1 + lunar_day - 1) % 6
return positions[month_position], positions[day_position], positions[hour_position]
def convert_to_lunar(year, month, day):
# 使用Converter将公历日期转换为农历日期
solar_date = Solar(year, month, day)
lunar_date = Converter.Solar2Lunar(solar_date)
return lunar_date.year, lunar_date.month, lunar_date.day
def convert_hour_to_shichen(in_hour):
# 将24小时制时间转换为12小时制,并确定对应的时辰
hour = int(in_hour.split(":")[0])
if 0 <= hour < 1 or hour == 23:
return "子", 0
elif 1 <= hour < 3:
return "丑", 1
elif 3 <= hour < 5:
return "寅", 2
elif 5 <= hour < 7:
return "卯", 3
elif 7 <= hour < 9:
return "辰", 4
elif 9 <= hour < 11:
return "巳", 5
elif 11 <= hour < 13:
return "午", 6
elif 13 <= hour < 15:
return "未", 7
elif 15 <= hour < 17:
return "申", 8
elif 17 <= hour < 19:
return "酉", 9
elif 19 <= hour < 21:
return "戌", 10
elif 21 <= hour < 23:
return "亥", 11
def get_valid_int(prompt, min_value, max_value):
while True:
try:
value = int(input(prompt))
if min_value <= value <= max_value:
return value
else:
print(f"请输入一个在{min_value}和{max_value}之间的整数。")
except ValueError:
print("输入无效,请输入一个整数。")
def get_valid_time(prompt):
while True:
time_str = input(prompt).strip() # 去除两端空白字符
# 清除时间字符串中的任何中文字符
time_str = re.sub(r'[^\x00-\x7F]+', '', time_str)
match = re.match(r'^([01]?[0-9]|2[0-3]):([0-5][0-9])$', time_str)
if match:
return time_str
else:
print("请输入一个有效的时间格式,例如 '5:30'。")
# 输入公历年、月、日和时辰(24小时制)
year = get_valid_int("请输入公历年份(如 2024):", 1, 9999)
month = get_valid_int("请输入公历月份(1-12):", 1, 12)
day = get_valid_int("请输入公历日期(1-31):", 1, 31)
hour_input = get_valid_time("请输入24小时制时间(格式为 HH:MM):")
lunar_year, lunar_month, lunar_day = convert_to_lunar(year, month, day)
# 转换公历时间到农历时辰
shichen, hour = convert_hour_to_shichen(hour_input)
# 进行小六壬预测
month_result, day_result, hour_result = six_divination(lunar_month, lunar_day, hour)
print(f"公历{year}年{month}月{day}日{hour_input}对应的农历日期为:农历{lunar_year}年{lunar_month}月{lunar_day}日{hour_input}")
print(f"根据小六壬预测,该日期的占卜结果为:月份位置-{month_result}, 日期位置-{day_result}, 农历时辰为:{shichen}时-{hour_result}")
例1
如你农历2010年六月初五上午九点半。要和男友(女友)初次相会,可以算一下吉凶如何。
前面说了凡事都从大安起卦,大安为一月,留连为二月,速喜为三月,赤口为四月,小吉为五月,空亡为六月;下面再算日子,月份算到空亡了,接着日子从空亡开始,空亡是初一,大安是初二,留连初三,速喜初四,赤口初五;同理接着时辰算,赤口是子时,小吉是丑时,空亡是寅时,大安是卯时,留连是辰时,速喜是巳时(9:00-11:00)。所以最终得了个速喜卦。是好事,可能一见钟情。
例2
以农历2010年农历八月
十七日辰时为例。(一)首先照顺时针方向由大安开始计为正月,则留连便是二月,如此类推,八月就是留连了。
(二)再由八月这个留连开始计为初一,速喜为初二,如此类推,十七日就是空亡了。
(三)由十七日这个空亡开始计为子时,大安就是丑时,如此类推,顺时针数下去,辰时就落在赤口上了
验证:
例1
如上所述:农历2010年六月初五上午九点半即2010年7月16日9:30
六月——空亡,初五——赤口,上午九点半——速喜巳时
例2
如上所述:
农历八月十七日辰时即2010年9月24日上午07:00-09:00
八月——留连,十七——空亡,上午07:00-09:00——赤口
请输入公历年份:2010
请输入公历月份:7
请输入公历日期:16
请输入24小时制时间(格式为 HH:MM):9:30
公历2010年7月16日9:30对应的农历日期为:农历2010年6月5日9:30
根据小六壬预测,该日期的占卜结果为:月份位置-空亡, 日期位置-赤口, 农历时辰为:巳时-速喜
请输入公历年份:2010
请输入公历月份:9
请输入公历日期:24
请输入24小时制时间(格式为 HH:MM):8:00
公历2010年9月24日8:00对应的农历日期为:农历2010年8月17日8:00
根据小六壬预测,该日期的占卜结果为:月份位置-留连, 日期位置-空亡, 农历时辰为:辰时-赤口