当前位置: 首页 > news >正文

编一个自己的万年历

编一个自己的万年历

前阶段突然想查一下某一天是星期几,于是自己编了一个[小程序][https://blog.csdn.net/weixin_41905135/article/details/138972055?spm=1001.2014.3001.5501],但是功能很单一,就是单纯的查是星期几。(虽然用网络工具或者手机的日历软件也很容易),但是自己编一个是不是更方便呢?当然是了。今天是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 = yearself.month = monthself.day = dayself.date = datetime(year, month, day)self.date_str = self.date.strftime("%Y-%m-%d")self.lunar_date = Nonedef get_weekday(self):"""Convert date to weekday (Monday=0, Tuesday=1, ..., Sunday=6)"""# 确定是第几周return (self.date.isocalendar().week), (self.date.weekday() + 1) % 7def 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. 代码将计算农历日期并打印以下信息:
    • 公历日期。
    • 公历日期的星期。
    • 农历日期。
    • 农历年的属相动物。

示例:

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

Screenshot 2024-05-24 at 17.31.51

代码中使用的类和方法:

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

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

相关文章:

  • 接口使用实例——数组排序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • Android Audio基础——AudioFlinger回放录制线程(七)
  • 【NUCLEO-G071RB】007——IWDG-喂狗
  • 网站策划是什么
  • 专注于运动控制芯片、运动控制产品研发、生产与销售为一体的技术型芯片代理商、方案商——青牛科技
  • mac 系统正确安装nvm
  • 山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(十九)- JUC(5)
  • 在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style
  • linux的用户管理
  • 前端 MVC 分层的实践
  • 公司废弃的2014年群晖 DS215J 被我打包回家了,试玩一下
  • 世界上首位AI程序员诞生,AI将成为人类的对手吗?
  • Vue.js - Vue 的安装 以及 常用的 Vue 指令 【0基础向 Vue 基础学习】
  • Pytorch-08 实战:手写数字识别
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • create-react-app项目添加less配置
  • E-HPC支持多队列管理和自动伸缩
  • ESLint简单操作
  • Java小白进阶笔记(3)-初级面向对象
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • php中curl和soap方式请求服务超时问题
  • Python打包系统简单入门
  • Vue2.x学习三:事件处理生命周期钩子
  • 编写符合Python风格的对象
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 服务器之间,相同帐号,实现免密钥登录
  • 回顾2016
  • 机器学习学习笔记一
  • 首页查询功能的一次实现过程
  • 通过npm或yarn自动生成vue组件
  • 网络应用优化——时延与带宽
  • puppet连载22:define用法
  • 带你开发类似Pokemon Go的AR游戏
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)Nginx简介和安装教程
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (二)Linux——Linux常用指令
  • (分布式缓存)Redis持久化
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)uboot源码分析
  • (转)EOS中账户、钱包和密钥的关系
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net和php怎么连接,php和apache之间如何连接
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @WebServiceClient注解,wsdlLocation 可配置
  • @软考考生,这份软考高分攻略你须知道