编一个自己的万年历

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

前阶段突然想查一下某一天是星期几,于是自己编了一个[小程序][],但是功能很单一,就是单纯的查是星期几。(虽然用网络工具或者手机的日历软件也很容易),但是自己编一个是不是更方便呢?当然是了。今天是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)

代码说明:

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

使用方法:

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

示例:

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

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

image.png

代码中使用的类和方法:

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

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

相关文章
|
SQL 缓存 监控
druid数据源配置参数说明
druid数据源配置参数说明
2237 0
|
小程序 JavaScript Android开发
【经验分享】如何在支付宝小程序里玩转富文本功能
【经验分享】如何在支付宝小程序里玩转富文本功能
676 6
|
JavaScript 安全 定位技术
vue3实现高德地图多点标注(so easy)
vue3实现高德地图多点标注(so easy)
1612 0
|
分布式计算 大数据 Apache
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
595 0
|
9月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
281 18
|
3月前
|
算法 前端开发 计算机视觉
在线照片眨眼生成器,一键生成眨眼照片, 手机制作人脸眨眼张嘴
本系统基于Flask、OpenCV和dlib实现,包含后端服务、前端界面和动画算法三大模块。支持上传照片实时检测人脸关键点,利用薄板样条变换生成自然眨眼动画效果
|
10月前
|
缓存 API
全球最新地震信息免费API接口教程
该接口提供全球最新地震信息,数据源自中国地震台网,每5分钟更新一次。支持POST/GET请求,需提供用户ID和KEY。返回数据包括地震等级、时间、经纬度、深度及位置等详细信息。示例请求和响应详见文档。
1464 4
|
5月前
|
人工智能 文字识别 自动驾驶
突破自动驾驶"交规困境":高德&西交发布交规+高精地图基准MapDR,车道级交通规则在线理解,让AI更懂交规!
作为专业领先的出行和位置服务提供商,高德地图以数据准确率高、鲜度高著称。当前自动驾驶技术总是关注到矢量地图的构建,往往忽略了车道级驾驶规则的制作。对应图商而言,车道级的领航不仅需要有正确的车道级矢量表达,还要明确每条路的驾驶规则,保证引导的准确率。
195 2
|
5月前
|
存储 Java 定位技术
SpringBoot整合高德地图完成天气预报功能
本文介绍了如何在SpringBoot项目中整合高德地图API实现天气预报功能。从创建SpringBoot项目、配置依赖和申请高德地图API开始,详细讲解了实体类设计、服务层实现(调用高德地图API获取实时与预报天气数据)、控制器层接口开发以及定时任务的设置。通过示例代码,展示了如何获取并处理天气数据,最终提供实时天气与未来几天天气预报的接口。文章还提供了测试方法及运行步骤,帮助开发者快速上手并扩展功能。
|
7月前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
171 31