代码如下:
tgs = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"] # 天干列表
dzs = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"] # 地支列表
sxs = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"] # 属相列表
tgwxs = ["木", "木", "火", "火", "土", '土', '金', '金', '水', '水'] # 天干五行
dzwxs = ['水', '土', '木', '木', '土', '火', '火', '土', '金', '金', '土', '水'] # 地支五行
tgys = {"甲": 3, "乙": 5, "丙": 7, "丁": 9, "戊": 1, "己": 3, "庚": 5, "辛": 7, "壬": 9, "癸": 1}
ydays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
yys = {0: '阳', 1: '阴'}
def get_tgdz(this_date='2023-09-17 12:27:12'):
_Y = int(this_date[:4])
_M = int(this_date[5:7])
_D = int(this_date[8:10])
_H = int(this_date[11:13])
yt = (_Y - 3) % 10 - 1 # 年天干
yd = (_Y - 3) % 12 - 1 # 年地支
mt = (tgys[tgs[yt]] - 2 + _M) % 10 # 月天干
md = (_M + 1) % 12 # 月地支
"""
日干支公式:
1900—-1999年日干支基数=(年尾二位数+3)×5+55+(年尾二位数-1)/4
2000—-2099年日干支基数=(年尾二位数+7)×5+15+(年尾二位数+19)/4(只用商数,余数不用,超过60就去掉60)
"""
if 1900 <= _Y <= 1999:
_js = int((_Y % 100 + 3) * 5 + 55 + (_Y % 100 - 1) / 4)
elif 2000 <= _Y <= 2099:
_js = int((_Y % 100 + 7) * 5 + 15 + (_Y % 100 + 19) / 4)
else:
return '只能查询1900-2099年的范围!'
_js = _js % 60 if _js % 60 else 60
for i in range(_M - 1):
_js += ydays[i]
if i == 1 and _Y % 4 == 0:
_js += 1
else:
_js += _D
_js = _js % 60 if _js % 60 else 60
dt = _js % 10 - 1 # 日天干
dd = _js % 12 - 1 # 日地支
hd = (_H+1)//2%12 if _H%2 else _H//2 # 时地支
ht = ((dt + 1) * 2 + hd - 2) % 10 # 时天干
gz_str = f"{tgs[yt]}{dzs[yd]}{tgs[mt]}{dzs[md]}{tgs[dt]}{dzs[dd]}{tgs[ht]}{dzs[hd]}" # 干支
yy_str = f"{yys[yt%2]}{yys[yd%2]}{yys[mt%2]}{yys[md%2]}{yys[dt%2]}{yys[dd%2]}{yys[ht%2]}{yys[hd%2]}" # 阴阳
wx_str = f"{tgwxs[yt]}{dzwxs[yd]}{tgwxs[mt]}{dzwxs[md]}{tgwxs[dt]}{dzwxs[dd]}{tgwxs[ht]}{dzwxs[hd]}" # 五行
return {'干支': gz_str, '阴阳': yy_str, '五行': wx_str}
if __name__ == '__main__':
gz = get_tgdz('2023-09-17 12:58:12')
for i in range(8):
print(gz['干支'][i], end=' ')
print()
for i in range(8):
print(gz['阴阳'][i], end=' ')
print()
for i in range(8):
print(gz['五行'][i], end=' ')
"""
输出:
癸 卯 壬 戌 戊 寅 戊 午
阴 阴 阳 阳 阳 阳 阳 阳
水 木 水 土 土 木 土 火
"""