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 详解基本语法_函数_返回值
Jan 22 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
python正则实现提取电话功能
Feb 24 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
python2 与 python3 实现共存的方法
Jul 12 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
python判断链表是否有环的实例代码
Jan 31 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Python魔术方法专题
Jun 19 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开发工具之vs2005图解
2008/01/12 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
php根据年月获取季度的方法
2014/03/31 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
phpStorm2020 注册码
2020/09/17 PHP
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
Sea.JS知识总结
2016/05/05 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
python实现数组插入新元素的方法
2015/05/22 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
python 公共方法汇总解析
2019/09/16 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
自我鉴定怎么写
2014/01/12 职场文书
学校安全管理制度
2015/08/06 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书