from datetime import datetime
class Suanbazis:
#天干地支60组合
def __init__(self):
self.Chinese_era=[
"甲子","乙丑","丙寅","丁卯","戊辰","己巳","庚午","辛未","壬申","癸酉","甲戌","乙亥",
"丙子","丁丑","戊寅","己卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥",
"戊子","己丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","己亥",
"庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","己酉","庚戌","辛亥",
"壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","己未","庚申","辛酉","壬戌","癸亥",]
self.Shi_tiangan=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
self.Wu_hu = ["丙","戊","庚","壬","甲"] #五虎与五鼠相差4
self.Wu_shu = ["甲","丙","戊","庚","壬",]
self.Shier_dizhi=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]#0~11
#以下为灵龟八法支撑
#阳日
self.yang_ri=[
"甲子","丙寅","戊辰","庚午","壬申"
"甲戌","丙子","戊寅","庚辰","壬午"
"甲申","丙戌","戊子","庚寅","壬辰"
"甲午","丙申","戊戌","庚子","壬寅"
"甲辰","丙午","戊申","庚戌","壬子"
"甲寅","丙辰","戊午","庚申","壬戌"]
self.zhuri_era={
"甲子":17,"乙丑":19,"丙寅":15,"丁卯":16,"戊辰":17,"己巳":17,"庚午":16,"辛未":17,"壬申":17,"癸酉":16,
"甲戌":20,"乙亥":16,"丙子":14,"丁丑":18,"戊寅":15,"己卯":18,"庚辰":19,"辛巳":14,"壬午":15,"癸未":17,
"甲申":19,"乙酉":18,"丙戌":17,"丁亥":15,"戊子":14,"己丑":20,"庚寅":17,"辛卯":15,"壬辰":18,"癸巳":14,
"甲午":17,"乙未":19,"丙申":16,"丁酉":17,"戊戌":17,"己亥":17,"庚子":16,"辛丑":17,"壬寅":16,"癸卯":15,
"甲辰":20,"乙巳":16,"丙午":14,"丁未":18,"戊申":16,"己酉":19,"庚戌":19,"辛亥":14,"壬子":15,"癸丑":17,
"甲寅":18,"乙卯":17,"丙辰":17,"丁巳":15,"戊午":14,"己未":20,"庚申":18,"辛酉":16,"壬戌":18,"癸亥":14,}
self.zhushi_era={
'甲子': 18, '乙丑': 16, '丙寅': 14, '丁卯': 12, '戊辰': 10, '己巳': 13, '庚午': 17, '辛未': 15, '壬申': 13, '癸酉': 11,
'甲戌': 14, '乙亥': 12, '丙子': 16, '丁丑': 14, '戊寅': 12, '己卯': 15, '庚辰': 13, '辛巳': 11, '壬午': 15, '癸未': 13,
'甲申': 16, '乙酉': 14, '丙戌': 12, '丁亥': 10, '戊子': 14, '己丑': 17, '庚寅': 15, '辛卯': 13, '壬辰': 11, '癸巳': 9,
'甲午': 18, '乙未': 16, '丙申': 14, '丁酉': 12, '戊戌': 10, '己亥': 13, '庚子': 17, '辛丑': 15, '壬寅': 13, '癸卯': 11,
'甲辰': 14, '乙巳': 12, '丙午': 16, '丁未': 14, '戊申': 12, '己酉': 15, '庚戌': 13, '辛亥': 11, '壬子': 15, '癸丑': 13,
'甲寅': 16, '乙卯': 14, '丙辰': 12, '丁巳': 10, '戊午': 14, '己未': 17, '庚申': 15, '辛酉': 13, '壬戌': 11, '癸亥': 9}
self.kai_xue={
1:"坎 申脉",2:"坤 照海",
3:"震 外关",4:"巽 临泣",5:"坤 照海",
6:"乾 公孙",7:"兑 后溪",
8:"艮 内关",9:"离 列缺"}
def Suan_year_era(self,year):
#计算年柱,不得小于1924年 #year_era年柱
year = year-1924
year_yu=year%60
year_era = self.Chinese_era[year_yu]
#print(f"年柱 {year_era}")
return year_era
def Suan_yue_era(self,year_era,day_month,):
#计算月柱
#按五虎遁决得到正月的月柱 下标从0开始
for i in self.Shi_tiangan:
if year_era[0] == i:
months =self.Shi_tiangan.index(i)
if months >= 5:
months -= 5
#正月的月柱
zhengyue = self.Wu_hu[months]+self.Shier_dizhi[2]
#正月的月柱在天干地支的下标
#print(self.Chinese_era.index(zhengyue))
day_month += self.Chinese_era.index(zhengyue)
#print(day_month)
#因为是从0开始算的下标,要减1
yue_era = self.Chinese_era[day_month-1]
#print(f"月柱 {yue_era}")
return yue_era
def Suan_ri_era(self,days,day_str='辛巳'):
"""计算日柱 day_era
days 距离默认的天数
day_str='辛巳' 这是起始天数,默认1970-01-01 己酉年丙子月辛巳日
就是找到一天知道日柱的作为定位,60天轮回
"""
day_yu = days % 60
xiangcha = len(self.Chinese_era)-self.Chinese_era.index(day_str)
day_era =self.Chinese_era[day_yu-xiangcha]
#print(f"日柱 {day_era}")
return day_era
#def Suan_day_era(self,year,month,day):
def Suan_shi_era(self,ri_era,hour_shi):
#计算时柱
for i in self.Shi_tiangan:
if ri_era[0] == i:
hour_s =self.Shi_tiangan.index(i)
#hour_s+=4 #五虎与五鼠相差4
if hour_s >= 5:
hour_s -= 5
zi_shi = self.Wu_shu[hour_s]
#hour_shi = date.hour
if hour_shi%2:
hour_number= int((hour_shi+1)/2)
else:
hour_number= int(hour_shi/2)
#if hour_number==12:
# hour_number=0
zi_shi =zi_shi+self.Shier_dizhi[0]
shi_number=self.Chinese_era.index(zi_shi)+hour_number
shi_era =self.Chinese_era[shi_number]
#print(f"{hour_shi}时柱 {shi_era}")
return shi_era
# 按日时开穴
def Holing(self,year,month,day,time,divis=0):
print(f"今日此时八柱为{year}年{month}月{day}日{time}时")
if day in self.yang_ri:
#print("当属阳日")
divis=9
else:
#print("当属阴日")
divis=6
radix = self.zhuri_era[day]+self.zhushi_era[time]
#print(f"基数一共是:{radix}")
yushu = radix % divis
print("此时按灵龟八法:当开",end="--")
if yushu==0:
print(self.kai_xue[divis])
else:
print(self.kai_xue[yushu])
if __name__=="__main__":
app = Suanbazis()
#today = datetime.today()
date = datetime.now()
today = date.strftime("%Y-%m-%d %H:%M:%S")
print(f"今天的日期是:{today}")
day_old = datetime.strptime("1970-01-01","%Y-%m-%d")
day_new = date.strftime("%Y-%m-%d")
day_new = datetime.strptime(day_new,"%Y-%m-%d")
dalta = day_new-day_old
days = dalta.days
day_month = date.month-1
day_hour = date.hour
day_year = date.year
year_era=app.Suan_year_era(date.year)
yue_era=app.Suan_yue_era(year_era,day_month)
day_era=app.Suan_ri_era(days)
shi_era=app.Suan_shi_era(day_era,day_hour)
app.Holing(year_era,yue_era,day_era,shi_era)
其中月柱方法还不是很完美,没经过大量测试,月柱可能会有误差,同时公历和农历相差并不是固定一个月的,所以月柱的函数不是准确的。
一般来说,现在想看年柱月柱日柱,直接在手机上的日历看就很方便,而时柱可依靠日柱来推算。而我本来的目的是想开八法,所以年柱的月柱只是随便弄弄。
写这稿只是玩一下的性质,学软件并不一定是为了多历害,只是刚好可以方便自己。
更改内容,时柱按五鼠遁决。