如何在Python上取得農曆的日期與進行相關計算

 

 

使用的Python套件「ZhDate」

在Python上,可以使用「ZhDate」這個套件來進行陽曆、農曆相關的轉換與計算。安裝時,可以透過以下的指令:

pip install zhdate

 

範例程式

下面提供一些簡單參考範例

陽曆、農曆的轉換

from zhdate import ZhDate
from datetime import datetime 

#今天的農曆日
print(ZhDate.today())
>> 农历2023年1月11日

#陽曆轉農曆
dt_date1 = datetime(2023, 1, 1)
date_lunar = ZhDate.from_datetime(dt_date1)
print(date_lunar)
print(date_lunar.chinese())
>> 农历2022年12月10日
>> 二零二二年腊月初十 壬寅年 (虎年)

#農曆轉陽曆
date_lunar = ZhDate(2023, 1, 15)
dt_date2 = date_lunar.to_datetime()
print(dt_date2)
>> 2023-02-05 00:00:00

 

日期的加減

#農曆日期的加法
date_lunar = ZhDate(2023, 1, 1) + 30 # 加整數返回相隔天數以后的新農曆對象

#農曆日期的減法
#减整數,得到差額天數的新農曆對象
new_zhdate = ZhDate(2023, 1, 1) - 30  
#兩個zhdate對象相减得到兩個農曆日期的差額
new_zhdate2 = ZhDate(2023, 1, 1) - ZhDate(2022, 1, 1) 
# 减去陽曆日期,得到農曆日期和陽曆日期之間的天數差額
new_zhdate3 = ZhDate(2023, 1, 1) - datetime(2023, 1, 1) 

 

日期的比較

雖然文件上有提到zhdate有支援比較的功能,但只有支援「==」,因此如果要進行日期的比對,還是要轉為datetime。

#日期比較
date1 = datetime(2023, 2, 1)
date2 = ZhDate(2023,2,1).to_datetime()

if date1>date2:
    print('B')
elif date1<date2:
    print('S')
else:
    print('E')

 

閏月

date3 = ZhDate(2020, 4, 15)
print(date3.to_datetime())
>> 2020-05-07 00:00:00

#透過leap_month=True的指定,可以取得該閏月的另一個陽曆日期
date3 = ZhDate(2020, 4, 15, leap_month=True)
print(date3.to_datetime())
>> 2020-06-06 00:00:00