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实现bitmap数据结构详解
Feb 17 Python
python实现Adapter模式实例代码
Feb 09 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
django 消息框架 message使用详解
Jul 22 Python
python日志模块logbook使用方法
Sep 19 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
opencv实现图像几何变换
Mar 24 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
html读出文本文件内容
2007/01/22 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
python lxml中etree的简单应用
2019/05/10 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
情侣吵架检讨书
2014/02/05 职场文书
学习标兵获奖感言
2014/02/20 职场文书
人事专员职责
2014/02/22 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
党小组考察意见
2015/06/02 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Elasticsearch 数据类型及管理
2022/04/19 Python