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