Python 获取年月日时的天干地支阴阳五行

代码如下:


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=' ')

"""
输出:
癸 卯 壬 戌 戊 寅 戊 午
阴 阴 阳 阳 阳 阳 阳 阳
水 木 水 土 土 木 土 火
"""

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值