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实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python脚本实现网卡流量监控
Feb 14 Python
Python中特殊函数集锦
Jul 27 Python
python 网络编程详解及简单实例
Apr 25 Python
Django基于ORM操作数据库的方法详解
Mar 27 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
python实现查找所有程序的安装信息
Feb 18 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 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
星际争霸任务指南——神族
2020/03/04 星际争霸
将PHP作为Shell脚本语言使用
2006/10/09 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
wxPython中文教程入门实例
2014/06/09 Python
代码分析Python地图坐标转换
2018/02/08 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
"序列点" 是什么
2016/07/29 面试题
红旗方阵解说词
2014/02/12 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python