首頁 > 軟體

Python利用zhdate模組實現農曆日期處理

2022-03-31 13:02:53

簡介

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農曆日期處理的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com