编一个自己的万年历

简介: 编一个自己的万年历

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

系统环境

操作系统:macOS sonoma

IDE开发环境:PyCharm 2024.1专业版

Python 3.12

功能如下

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

源代码如下:

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)
AI 代码解读

代码说明:

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

使用方法:

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

示例:

请输入年份:2024
请输入月份:5
请输入日份:24

阳历日期 : 2024/05/2421周的星期五
阴历日期(农历): 二零二四年四月十七
中国农历 : 龙年
AI 代码解读

image.png

代码中使用的类和方法:

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

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

目录
打赏
0
1
0
1
224
分享
相关文章
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
492 0
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
235 18
全球最新地震信息免费API接口教程
该接口提供全球最新地震信息,数据源自中国地震台网,每5分钟更新一次。支持POST/GET请求,需提供用户ID和KEY。返回数据包括地震等级、时间、经纬度、深度及位置等详细信息。示例请求和响应详见文档。
1144 4
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
107 31
查IP[查指定IP归属地]免费API接口教程
该API用于查询指定IPv4地址的归属地信息,支持POST和GET请求。需提供用户ID和KEY,可选填查询IP,默认为请求接口IP。返回信息包括状态码、地理位置及运营商等。示例请求和响应详见文档。
|
11月前
|
将镜像上传到Docker Hub中央仓库中
将镜像上传到Docker Hub中央仓库中
750 2
在Linux中,如何使用sed命令进行文本替换?
在Linux中,如何使用sed命令进行文本替换?
基于边缘计算的智能物联网:未来趋势与挑战
感谢您阅读本文!如果您对基于边缘计算的智能物联网、相关技术或未来发展有任何疑问或想法,请在评论区与我交流。让我们一起探索边缘计算如何为智能物联网带来更多的创新和机遇!
938 1
服务端apk打包教程
本文我将给大家介绍一个 apk 打包工具 VasDolly 的使用介绍、原理以及如何在服务端接入 VasDolly 进行服务端打渠道包操作。
232 0
Vue3实现图片懒加载及自定义懒加载指令
Vue3实现图片懒加载及自定义懒加载指令
954 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问