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 del()函数用法
Mar 24 Python
python进阶教程之词典、字典、dict
Aug 29 Python
Python爬虫代理IP池实现方法
Jan 05 Python
详谈python在windows中的文件路径问题
Apr 28 Python
深入浅析Python传值与传址
Jul 10 Python
Python中的 enum 模块源码详析
Jan 09 Python
Python中print函数简单使用总结
Aug 05 Python
Python 使用type来定义类的实现
Nov 19 Python
Python print不能立即打印的解决方式
Feb 19 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
python从Oracle读取数据生成图表
Oct 14 Python
python多线程爬取西刺代理的示例代码
Jan 30 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 星际争霸
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
php 伪静态之IIS篇
2014/06/02 PHP
php jsonp单引号转义
2014/11/23 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
汽车促销活动方案
2014/03/31 职场文书
运动会标语
2014/06/21 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
初中作文评语
2014/12/25 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript