ChnCal是一个python库,目前功能包括:中国节假日工作日查询和判断、沪深A股交易日历查询,公历农历转化、生肖八字查询等。ChnCal基于chinese_calendar(https://github.com/LKI/chinese-calendar)改写。
安装: pip install chncal --upgrade
github: https://github.com/Genlovy-Hoo/chncal
pypi:https://pypi.org/project/chncal/
部分API简介:
1. 中国假期和工作日等相关函数,见chinese_calendar文档,chncal在chinese_calendar的基础上增加了2001—2003年的国家假期安排数据。同名函数的日期参数均改为可传字符串,最后一个日期参数可不传(默认使用当天日期)。
2. 沪深A股交易日相关函数
from chncal import *
# 判断日是否交易日
>>> is_tradeday(date=20220828) # date不传则默认为当天
Out[]: False
# 最近的一个交易日
>>> get_recent_tradeday(date='20220828')
Out[]: datetime.date(2022, 8, 29)
# 给定日期后的第n个交易日
>>> get_next_nth_tradeday(date='20220828', n=5) # n可为负数
Out[]: datetime.date(2022, 9, 2)
# 获取两个日期间的交易日列表
>>> get_trade_dates(20220801, 20220820)
Out[]: [datetime.date(2022, 8, 1),
... datetime.date(2022, 8, 2),
...
... datetime.date(2022, 8, 19)]
3. 农历公历转换函数
# 公历日期转农历日期,date不传则默认为当天
>>> gen2lun(date=19920718) # 若返回日期以'_'结束,则表示闰月日期
Out[]: '1992.06.19'
# 农历日期转公历日期
>>> lun2gen(date='1994.12.01') # 农历转公历日期传入格式必须为'%Y.%m.%d'
Out[]: '1995.01.01'
# 公历日期转化为干支纪年法
>>> gen2gz(20220826)
Out[]: '壬寅(虎)年,戊申(猴)月,辛亥(猪)日'
4. 天干地支八字算命相关函数
# 根据公时间获取八字
>>> get_bazi('19920514 18:30')
Out[]: '壬申(猴)年,乙巳(蛇)月,庚寅(虎)日,乙酉(鸡)时'
# 根据农历时间获取八字
>>> get_bazi_lunar('2023.02.01 08:00', run=True) # run设置是否闰月
Out[]:'癸卯(兔)年,乙卯(兔)月,己卯(兔)日,戊辰(龙)时'
# 称命函数,根据公历时间称命,返回结果包括重量(3.5表示三两五钱)、
# 八字、袁天罡称命歌以及八字对应年月日时辰分别的重量
>>> fate_weight('1995.01.01 12:00')
Out[]: {'weight': 3.5,
... 'bazi': '甲戌(狗)年,丙子(鼠)月,壬辰(龙)日,丙午(马)时',
... 'song': '平生福量不周全,祖业根基觉少传。营业生涯宜守旧,时来衣食胜从前。',
... 'weight_split': (1.5, 0.5, 0.5, 1.0)}
# 根据农历时间称命
>>> fate_weight_lunar('2023.02.01', run=True)
Out[]: {'weight': 4.0,
... 'bazi': '癸卯(兔)年,乙卯(兔)月,己卯(兔)日,甲子(鼠)时',
... 'song': '生平衣禄是绵长,件件心中自主张。前面风霜多受过,后来必定享安康。',
... 'weight_split': (1.2, 0.7, 0.5, 1.6)}
数据来源及说明:
1. 农历日历数据来自香港天文台:https://www.hko.gov.hk/tc/gts/time/conversion1_text.htm
2. 时辰的八字采用整点划分,未精确到分和秒,跟寿星天文历的结果会有差别(http://www.nongli.net/sxwnl/)。