编一个自己的万年历
前阶段突然想查一下某一天是星期几,于是自己编了一个[小程序][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()
方法来将农历日期转换为汉字。
使用方法:
- 输入公历日期(年份、月份、日份)。
- 代码将计算农历日期并打印以下信息:
- 公历日期。
- 公历日期的星期。
- 农历日期。
- 农历年的属相动物。
示例:
请输入年份:2024
请输入月份:5
请输入日份:24阳历日期 : 2024/05/24 第21周的星期五
阴历日期(农历): 二零二四年四月十七
中国农历 : 龙年
代码中使用的类和方法:
- Lunar 类:用于表示公历日期。
- LunarDate 类:用于表示农历日期。
- num_convert_char() 方法:将农历日期的日部分转换为汉字。
- lunar_char_year_month_day() 方法:将农历日期转换为汉字。
- get_animal_year() 方法:根据农历年份返回属相动物。
部分代码借鉴AI(自行搭建的AI大模型Ollama)。