Python利用zhdate模块实现农历日期处理


Posted in Python onMarch 31, 2022

简介

zhdate模块统计从1900年到2100年的农历月份数据代码,支持农历和公历之间的转化,并且支持日期差额运算。

安装

pip install zhdate

主要功能

1、获取公历对应的农历日期

2、获取中文描述农历日期

3、计算公历距离农历差额

获取公历对应的农历日期:格式ZhDate.from_datetime(datetime(year, month, day))

print(ZhDate.from_datetime(datetime(2022, 3, 27)))
# 农历2022年2月25日

获取中文描述农历日期:需对结果调用chinese()方法

格式ZhDate.from_datetime(datetime(year, month, day)).chinese()

print(ZhDate.from_datetime(datetime(2022, 3, 27)).chinese())
# 二零二二年二月二十五 壬寅年 (虎年)

计算公历距离农历差额:

格式:difference = lc_day.toordinal() - gc_day.toordinal()

源码

# -*- coding:utf-8 -*-
from zhdate import ZhDate
from datetime import datetime


def get_chinese_traditional_calendar(date=None):
    """
    :param date: none = now day.
    :return:
    """
    if date:
        year, month, day = int(date[:4]), int(date[4:6]), int(date[6:])
    else:
        now = str(datetime.now().strftime('%Y-%m-%d')).split("-")
        year, month, day = int(now[0]), int(now[1]), int(now[2])

    return ZhDate.from_datetime(datetime(year, month, day))


def get_difference_days(date1, date2=None):
    """
    :param date1:
    :param date2: none = now day
    :return:
    """
    if date2:
        year1, month1, day1 = int(date1[:4]), int(date1[4:6]), int(date1[6:])
        year2, month2, day2 = int(date2[:4]), int(date2[4:6]), int(date2[6:])
    else:
        now = str(datetime.now().strftime('%Y-%m-%d')).split("-")
        year1, month1, day1 = int(date1[:4]), int(date1[4:6]), int(date1[6:])
        year2, month2, day2 = int(now[0]), int(now[1]), int(now[2])
        date2 = f"{year2}{month2}{day2}"

    one_day = datetime(year2, month2, day2)
    other_day = datetime(year1, month1, day1)
    difference = abs(one_day.toordinal() - other_day.toordinal())
    print(f'{date1} 距离 {date2} 相差 {difference} 天')
    return difference


def get_difference_chinese_calendar(gc_date, lc_date):
    """
    :param gc_date: the gregorian calendar 公历
    :param lc_day: the lunar calendar 农历
    :return:
    """
    year1, month1, day1 = int(gc_date[:4]), int(gc_date[4:6]), int(gc_date[6:])
    year2, month2, day2 = int(lc_date[:4]), int(lc_date[4:6]), int(lc_date[6:])
    gc_day = datetime(year1, month1, day1)

    lc_day = ZhDate(year2, month2, day2).to_datetime()
    difference = lc_day.toordinal() - gc_day.toordinal()
    print(f'公历 {gc_date} 距离 农历 {lc_date} 相差 {abs(difference)} 天')
    return difference


if __name__ == '__main__':
    # 当前日期对应的农历日期
    date1 = get_chinese_traditional_calendar()
    print(date1)
    print(date1.chinese())

    # 指定日期对应的农历日期
    date2 = get_chinese_traditional_calendar("20220328")
    print(date2)
    print(date2.chinese())

    # 公历日期相差
    get_difference_days("20220511")
    get_difference_days("20220327", "20221001")

    # 公历距离农历相差
    get_difference_chinese_calendar("20220327", "20220303")  # 距离农历三月三
    get_difference_chinese_calendar("20220327", "20220505")  # 距离端午节
    get_difference_chinese_calendar("20220327", "20220815")  # 距离中秋节
    get_difference_chinese_calendar("20220327", "20220909")  # 距离重阳节
    get_difference_chinese_calendar("20220327", "20230101")  # 距离春节

以上就是Python利用zhdate模块实现农历日期处理的详细内容,更多关于Python农历日期处理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
小小聊天室Python代码实现
Aug 17 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Python编程中类与类的关系详解
Aug 08 Python
如何理解python对象
Jun 21 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
详解Python中__new__方法的作用
Mar 31 #Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 #Python
利用Python多线程实现图片下载器
Python实现灰色关联分析与结果可视化的详细代码
聊聊基于pytorch实现Resnet对本地数据集的训练问题
pycharm安装深度学习pytorch的d2l包失败问题解决
利用For循环遍历Python字典的三种方法实例
Mar 25 #Python
You might like
德生1994机评
2021/03/02 无线电
PHP编程网上资源导航
2006/10/09 PHP
php获取地址栏信息的代码
2008/10/08 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
优秀小学生家长评语
2014/01/30 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
接待员岗位职责范本
2015/04/15 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android