编一个自己的万年历

编一个自己的万年历

前阶段突然想查一下某一天是星期几,于是自己编了一个小程序https://blog.csdn.net/weixin_41905135/article/details/138972055?spm=1001.2014.3001.5501,但是功能很单一,就是单纯的查是星期几。(虽然用网络工具或者手机的日历软件也很容易),但是自己编一个是不是更方便呢?当然是了。今天是AI的时代,想编程序已经很容易了。今天我把之前那个程序彻底重新捋了一次,增加了一些符合自己要求的功能。

系统环境

操作系统:macOS sonoma

IDE开发环境:PyCharm 2024.1专业版

Python 3.12

功能如下

将任意公历日期转换成农历日期、全年第几周的星期几、农历的属相年等

源代码如下:

python 复制代码
from lunardate import LunarDate
from datetime import datetime
# 定义一个阴历类
class Lunar:
    # 类属性
    number_dict = {
        '0': '零',
        '1': '一',
        '2': '二',
        '3': '三',
        '4': '四',
        '5': '五',
        '6': '六',
        '7': '七',
        '8': '八',
        '9': '九',
        '10': '十',
        '11': '十一',
        '12': '十二'
    }
    # 类属性属相年
    animal_years = {
        0: "猴",
        1: "鸡",
        2: "狗",
        3: "猪",
        4: "鼠",
        5: "牛",
        6: "虎",
        7: "兔",
        8: "龙",
        9: "蛇",
        10: "马",
        11: "羊"
    }

    # 定义初始化函数
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
        self.date = datetime(year, month, day)
        self.date_str = self.date.strftime("%Y-%m-%d")
        self.lunar_date = None


    def get_weekday(self):
        """
        Convert date to weekday (Monday=0, Tuesday=1, ..., Sunday=6)
        """
        # 确定是第几周
        return (self.date.isocalendar().week), (self.date.weekday() + 1) % 7

    def convert_to_lunar_date(self):
        self.lunar_date = LunarDate.fromSolarDate(self.year, self.month, self.day)
        return self.lunar_date

    # day转成汉字函数
    def num_convert_char(self):
        if self.lunar_date.day // 10 == 0:
            day_char = '初' + self.number_dict[str(self.lunar_date.day % 10)]
        elif self.lunar_date.day == 10:
            day_char = '初十'
        elif self.lunar_date.day // 10 == 1 and self.lunar_date.day != 10:
            day_char = '十' + self.number_dict[str(self.lunar_date.day % 10)]
        elif self.lunar_date.day // 10 == 2:
            day_char = '廿' + self.number_dict[str(self.lunar_date.day % 10)]
        elif self.lunar_date.day // 10 == 3:
            day_char = '三十'
        return day_char

    # 数字转成汉字
    def lunar_char_year_month_day(self):
        # 汉字字符年
        chinese_year = ''
        for digit in str(self.lunar_date.year):
            chinese_year += self.number_dict[digit]
        if self.number_dict[str(self.lunar_date.month)] == '一':
            lunar_month = '正'
        else:
            lunar_month = self.number_dict[str(self.lunar_date.month)]
        return chinese_year, lunar_month, self.num_convert_char()

    # 定义一个获取属相年的函数
    def get_animal_year(self):
        return self.animal_years[self.lunar_date.year % 12]


if __name__ == '__main__':
    # 输入公历日期
    year = int(input("请输入年份:"))
    month = int(input("请输入月份:"))
    day = int(input("请输入日份:"))

    
    try:
     		 # 生成一个阳历日期对象
        solar_day = Lunar(year, month, day)
        weeknum, weekday = solar_day.get_weekday()
        # 转换为农历日期
        lunar_date = solar_day.convert_to_lunar_date()
        print('- ' * 30)
        print(f"阳历日期 : {solar_day.date:%Y/%m/%d}", end='\t')
        print(f"第{weeknum}周的{['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'][weekday - 1]}")
        lunar_year, lunar_month, lunar_day = solar_day.lunar_char_year_month_day()
        if lunar_month == '十二':
            if lunar_day == '三十':
                print(f"阴历日期(农历): {lunar_year}年除夕(腊月三十)")
            else:
                print(f"阴历日期(农历): {lunar_year}年腊月{lunar_day}")
        else:
            print(f"阴历日期(农历): {lunar_year}年{lunar_month}月{lunar_day}")
        print(f'中国农历 : {solar_day.get_animal_year()}年')
        print('- '* 30)
    except ValueError as e:
        print(e)

代码说明:

该代码是一个 Python 类,用于将公历日期转换为农历日期并显示农历相关信息。它使用了 LunarDate 类来计算农历日期,并提供了 lunar_char_year_month_day() 方法来将农历日期转换为汉字。

使用方法:

  1. 输入公历日期(年份、月份、日份)。
  2. 代码将计算农历日期并打印以下信息:
    • 公历日期。
    • 公历日期的星期。
    • 农历日期。
    • 农历年的属相动物。

示例:

python 复制代码
请输入年份:2024
请输入月份:5
请输入日份:24

阳历日期 : 2024/05/24	第21周的星期五
阴历日期(农历): 二零二四年四月十七
中国农历 : 龙年

代码中使用的类和方法:

  • Lunar 类:用于表示公历日期。
  • LunarDate 类:用于表示农历日期。
  • num_convert_char() 方法:将农历日期的日部分转换为汉字。
  • lunar_char_year_month_day() 方法:将农历日期转换为汉字。
  • get_animal_year() 方法:根据农历年份返回属相动物。

部分代码借鉴AI(自行搭建的AI大模型Ollama)。

相关推荐
donoot2 分钟前
PaddleOCR + PyMuPDF 生成【全兼容双层 PDF】完整实操指南
人工智能·算法·pymupdf·paddleocr·双层pdf
paeamecium1 小时前
【PAT甲级真题】- Rational Sum (20)
数据结构·c++·python·算法·pat考试·pat
lpfasd1235 小时前
2026年第30周科技社区趋势周报:开放权重之争与AI Agent的破局
人工智能·科技
佛光芳林7 小时前
AI 情报局:用 PowerMem + SeekDB 做一个多 Agent 记忆小游戏
人工智能
爱昏羔7 小时前
下篇:从检索到交互 — 物流RAG问答系统与WebUI全实现
python·langchain·agent
通问AI7 小时前
2026年AI短剧技术现状:全链路AIGC生产已达95%,但用户完播率不足15%
人工智能·aigc
_Jimmy_8 小时前
Agent引用数据库知识过时的增量同步方案
人工智能·python·langchain
qq_454245038 小时前
Systemprompt 体系全览:形式化公理驱动的分层系统设计
人工智能
大龄码农有梦想8 小时前
传统的 BPMN 工作流审批和 AI 工作流有什么区别?
人工智能·流程引擎·工作流·ai agent·ai工作流·审批流·智能体平台
DO_Community8 小时前
Claude Opus 5 现已上线 DigitalOcean AI 推理云
人工智能·llm·agent·claude