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求解平方根的方法
Mar 11 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
python调用Delphi写的Dll代码示例
Dec 05 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
python学生信息管理系统(完整版)
Apr 05 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
python hough变换检测直线的实现方法
Jul 12 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 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
PHP 输出简单动态WAP页面
2009/06/09 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
javascript高级学习笔记整理
2011/08/14 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
python获取linux系统信息的三种方法
2020/10/14 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
《油菜花开了》教学反思
2014/02/22 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
公司活动总结怎么写
2014/06/25 职场文书
开发房地产协议书
2014/09/14 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
欠款纠纷起诉状
2015/05/19 职场文书