農歷節日倒計時:基于Python的公歷與農歷日期轉換及節日查詢小程序

農歷節日倒計時:基于Python的公歷與農歷日期轉換及節日查詢小程序

摘要

又是一年春節即將到來,突然想基于Python編寫一個農歷節日的倒計時小程序。該程序能夠根據用戶輸入的農歷節日名稱,計算出距離該節日還有多少天。通過使用lunardate庫進行公歷與農歷之間的日期轉換,程序可以處理閏月等特殊情況,并提供準確的倒計時結果。本文將詳細介紹程序的功能、實現原理以及代碼結構。


1. 引言

農歷是中國傳統歷法,許多重要的節日如春節、端午節、中秋節等都基于農歷日期。然而,由于農歷與公歷之間的差異(尤其是閏月的存在),直接通過公歷日期來計算這些節日的具體時間并不容易。為了幫助用戶更方便地了解即將到來的農歷節日,開發了這款基于Python的農歷節日倒計時程序。

2. 功能概述

該程序的主要功能包括:

  • 農歷節日查詢:用戶可以通過輸入農歷節日名稱(如“春節”、“端午節”等),查詢該節日對應的公歷日期。
  • 倒計時計算:程序會根據當前日期,計算距離下一個該節日還有多少天。
  • 閏月處理:程序能夠自動處理閏月的情況,確保計算結果的準確性。
  • 跨年處理:如果當前日期已經過了當年的節日,程序會自動計算下一年度的節日日期。
3. 技術實現
3.1 核心庫:lunardate

程序依賴于lunardate庫來進行公歷與農歷之間的日期轉換。lunardate是一個輕量級的Python庫,支持農歷和公歷之間的相互轉換,并且能夠正確處理閏月問題。通過該庫,我們可以輕松獲取任意農歷日期對應的公歷日期,反之亦然。

3.2 程序結構

程序的核心邏輯分為以下幾個部分:

  1. 定義農歷節日字典

    lunar_holidays = {"春節": (1, 1),  # 正月初一"元宵節": (1, 15),  # 正月十五"清明節": (4, 4),  # 清明時節"端午節": (5, 5),  # 五月初五"中秋節": (8, 15),  # 八月十五"重陽節": (9, 9)  # 九月初九
    }
    

    這個字典存儲了常見的農歷節日及其對應的農歷日期(月份和日子)。

  2. 獲取農歷日期

    def get_lunar_date(year, month, day):""" 獲取給定公歷日期對應的農歷日期 """lunar = LunarDate.fromSolarDate(year, month, day)return lunar.month, lunar.day
    

    該函數用于將公歷日期轉換為農歷日期,返回農歷的月份和日子。

  3. 計算距離節日的天數

    def days_until_festival(festival_name, current_year=None):if festival_name not in lunar_holidays:print("未識別的節日,請檢查輸入!")return None, Nonetoday = datetime.date.today()if current_year is None:current_year = today.yearlunar_month, lunar_day = lunar_holidays[festival_name]try:lunar_date = LunarDate(current_year, lunar_month, lunar_day).toSolarDate()except ValueError:lunar_date = LunarDate(current_year + 1, lunar_month, lunar_day).toSolarDate()if today > lunar_date:lunar_date = LunarDate(current_year + 1, lunar_month, lunar_day).toSolarDate()festival_year = current_year + 1else:festival_year = current_yeardelta = lunar_date - todayreturn festival_year, delta.days
    

    該函數是程序的核心邏輯,它根據用戶輸入的節日名稱,計算出距離該節日還有多少天。如果當前日期已經過了該節日,則會自動計算下一年度的節日日期。

  4. 主程序入口

    def main():festival = input("請輸入你想查詢的農歷節日:")festival_year, days_left = days_until_festival(festival)if festival_year is not None and days_left is not None:print(f"距離{festival_year}年的{festival}還有 {days_left} 天。")
    

    主程序通過命令行接收用戶輸入的節日名稱,調用days_until_festival函數進行計算,并輸出結果。

4. 特殊情況處理
4.1 閏月處理

農歷中存在閏月的概念,即某些年份會在某個月份之后再插入一個相同的月份。這使得農歷與公歷之間的轉換變得更加復雜。lunardate庫內置了對閏月的支持,因此在進行日期轉換時,程序能夠自動處理閏月的情況,確保計算結果的準確性。

4.2 跨年處理

如果當前日期已經過了當年的節日,程序會自動將計算范圍擴展到下一年度。例如,如果今天是2024年12月,而用戶查詢的是“春節”,程序會自動計算2025年的春節日期。

5. 使用示例

假設今天是2024年12月25日,用戶輸入“中秋節”。程序會首先檢查當前日期是否已經過了2025年的中秋節(2025年10月6日),然后計算出距離2025年中秋節(2025年10月6日)還有多少天。最終輸出結果如下:

請輸入你想查詢的農歷節日:春節
距離2025年的春節還有 34 天。
6. 總結

本文介紹了一款基于Python的農歷節日倒計時程序,該程序利用lunardate庫實現了公歷與農歷之間的日期轉換,并提供了農歷節日的倒計時功能。通過處理閏月和跨年等情況,程序能夠準確地計算出距離指定節日的時間,為用戶提供便捷的節日查詢服務。

未來,該程序還可以進一步擴展,例如增加更多的農歷節日、支持更多地區的農歷習俗等,以滿足更廣泛的需求。


參考資料
  • lunardate官方文檔
  • Python datetime模塊官方文檔

歡迎點贊、關注、收藏、轉發!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64323.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線性直流電流

電阻網絡的等效 等效是指被化簡的電阻網絡與等效電阻具有相同的 u-i 關系 (即端口方程),從而用等效電阻代替電阻網絡之后,不 改變其余部分的電壓和電流。 串聯等效: 并聯等效: 星角變換 若這兩個三端網絡是等效的,從任…

CDN(Content Delivery Network,內容分發網絡)

CDN(Content Delivery Network,內容分發網絡)是一種通過在網絡中部署分布式的服務器集群,將網站內容分發到最接近用戶的服務器節點,以提高用戶訪問速度和穩定性的重要網絡基礎設施。CDN的核心思想是讓用戶就近獲取所需…

B站推薦模型數據流的一致性架構

01 背景 推薦系統的模型,通過學習用戶歷史行為來達到個性化精準推薦的目的,因此模型訓練依賴的樣本數據,需要包括用戶特征、服務端推薦的視頻特征,以及用戶在推薦視頻上是否有一系列的消費行為。 推薦模型數據流,即為…

【LeetCode】839、相似字符串組

【LeetCode】839、相似字符串組 文章目錄 一、并查集1.1 并查集 二、多語言解法 一、并查集 1.1 并查集 求共有幾組, 聯想到并查集, 即并查集有幾個集合 字符串相似: 相差0個字符, 或2個字符 其中所有字符串長度都相同, 是比較方便處理的 // go var sets int var father […

你不需要對其他成年人的情緒負責

在這個紛繁復雜的世界里,每個人都是獨一無二的個體,背負著各自的故事、夢想與煩惱。在人際交往的廣闊舞臺上,我們時常會遇到這樣的情境:朋友、同事、家人,甚至是陌生人,他們的情緒似乎總能不經意間影響到我…

官宣!低空經濟司,掛牌成立!

近日,國家發展改革委網站“機關司局”欄目悄然更新,一個新設立的部門——低空經濟發展司(簡稱“低空司”)正式進入公眾視野。低空司的成立,無疑是對當前國家經濟發展形勢的深刻把握和前瞻布局。 低空經濟是以各類低空飛…

接口調用限頻(代理模式+滑動窗口)

目錄 代碼示例 接口 代理 接口實現 限流工廠 限流處理器接口 直接交換處理器 限流處理器 限流配置 滑動窗口限流 通過代理模式滑動窗口,限流請求第三方平臺,避免出現第三方平臺拋出限流異常,影響正常業務流程,從出口出發…

不安全物聯網的輕量級加密:綜述

Abstract 本文綜述了針對物聯網(IoT)的輕量級加密解決方案。這項綜述全面覆蓋了從輕量級加密方案到不同類型分組密碼的比較等多個方面。同時,還對硬件與軟件解決方案之間的比較進行了討論,并分析了當前最受信賴且研究最深入的分組…

【小程序】全局數據共享

目錄 全局數據共享 1. 什么是全局數據共享 2. 小程序中的全局數據共享方案 全局數據共享 - MobX 1. 安裝 MobX 相關的包 2. 創建 MobX 的 Store 實例 3. 將 Store 中的成員綁定到頁面中 4. 在頁面上使用 Store 中的成員 ?5. 將 Store 中的成員綁定到組件中 6. 在組件中…

自動化測試- 自動化測試模型

目錄 自動化測試模型簡介 1、線性模型 舉例 測試頁面html文件 測試腳本 2. 關鍵字驅動測試(Keyword-Driven Testing) 需測試內容 關鍵字驅動測試框架 創建測試用例文件 運行測試 3. 數據驅動測試(Data-Driven Testing) …

【GlobalMapper精品教程】091:根據指定字段融合圖斑(字段值相同融合到一起)

文章目錄 一、加載數據二、符號化三、融合圖斑1. 根據圖斑位置進行融合2. 根據指定字段四、注意事項一、加載數據 訂閱專欄后,從私信中查收配套實驗數據包,找到data091.rar,解壓并加載,如下圖所示: 屬性表如下: 二、符號化 為了便于比對不同的融合結果,查看屬性表根據…

JavaScript 實現動態產品展示網頁

JavaScript 實現動態產品展示網頁 1. HTML 頁面結構2. CSS 樣式設計3. JavaScript 實現功能功能總結 本文設計了一個基于 JavaScript 的動態產品展示網頁案例,核心功能包括: 動態產品分類過濾:通過點擊分類按鈕,僅顯示屬于該分類…

網絡爬蟲科普:原理、類型、策略與常用工具

網絡爬蟲科普:原理、類型、策略與常用工具 網絡爬蟲在當今互聯網時代扮演著極為重要的角色,它能幫助我們從海量的網絡信息中提取出有價值的數據。以下將從網絡爬蟲的基本概念、工作流程、類型、搜索策略以及常用工具等方面進行詳細科普介紹。 一、網絡…

strace工具使用

下載地址: https://github.com/strace/strace/releases/tag/v6.12 解壓后執行以下命令 ./configure --hostarm-linux --prefix/home/wei/Code/strace/strace-6.12/out CC/home/wei/Code/firmware/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-arm-none-linux…

圖像處理-Ch2-空間域的圖像增強

Ch2 空間域的圖像增強 文章目錄 Ch2 空間域的圖像增強Background灰度變換函數(Gray-level Transformation)對數變換(Logarithmic)冪律變換(Power-Law)分段線性變換函數(Piecewise-Linear)對比度拉伸(Contrast-Stretching)灰度級分層(Gray-level Slicing) 直方圖處理(Histogram …

Linux | Ubuntu零基礎安裝學習cURL文件傳輸工具

目錄 介紹 檢查安裝包 下載安裝 手冊 介紹 ?cURL是一個利用URL語法在命令行下工作的文件傳輸工具,首次發行于1997年??12。cURL支持多種協議,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…

cesium通過經緯度獲取3dtiles 得feature信息

找到這里3dtiles的兩種訪問方式: 1.1 3DTileContent#getFeature 這里涉及3DTile 數據結構,暫不了解3DTile 數據結構,因此暫不使用。 1.2 scene.pick 本次使用 scene表示虛擬場景中所有 3D 圖形對象和狀態的容器;scene中…

內置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的帶有ALC(自動電平控制)的前置音頻放大器芯片,最初產品為單聲道/立體聲收錄機及盒式錄音機而開發,作為錄音/回放的磁頭放大器使用;由于產品的高增益、低噪聲及ALC外部可調的特性&…

基于SSM的“快遞管理系統”的設計與實現(源碼+數據庫+文檔+PPT)

基于SSM的“快遞管理系統”的設計與實現(源碼數據庫文檔PPT) 開發語言:Java 數據庫:MySQL 技術:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系統展示 登陸頁面 注冊頁面 快遞員頁面 派單員訂單管理頁面 派單員訂單添…

Mac 查詢IP配置,網絡代理

常用命令 1.查詢IP ifconfig | grep "inet" 2.ping查詢 ping 172.18.54.19(自己IP) 3.取消代理,通過在終端執行以下命令,可以取消 Git 的代理設置 git config --global --unset http.proxy git config --global …