日历程序可以打印出任何一年的日历,程序运行后输入一个年份,如输入2017年,打印2017年全年的日历。
提示:(1)注意闰年在判定
(2)求某月在最大天数
(3)求某月1号是星期几
(4)循环打印每一个月的日历
import calendar
year = int(input("输入一个年份:"))
if calendar.isleap(year):
print(year, "是闰年\n")
else:
print(year, "不是闰年\n")
for month in range(1, 13):
days = calendar.monthrange(year, month)[1]
weekday = calendar.weekday(year, month, 1)
print("\n", year, "年", month, "月")
print("Mo Tu We Th Fr Sa Su")
for i in range(weekday):
print(" ", end="")
for day in range(1, days + 1):
if day < 10:
print(" ", end="")
print(day, end=" ")
if (day + weekday) % 7 == 0:
print()
print()
导出来后运行一次就自动关闭窗口了,有啥办法让它不关闭窗口,能继续输入年份运行
def get_week_monday_and_sunday_by_date(date_str):
"""
给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
:param date_str: 如:"2020-05-01"
:return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
"""
now_time = datetime.datetime.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
week_start_time = now_time - datetime.timedelta(days=now_time.weekday(), hours=now_time.hour,
minutes=now_time.minute, seconds=now_time.second,
microseconds=now_time.microsecond)
week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
return week_start_time, week_end_time
def get_week_start_and_end_by_date_interval(start_date_str, end_date_str):
"""
给定时间(日期)区间,返回区间中所有的周起止时间列表
:param start_date_str: "2020-01-31"
:param end_date_str: "2020-05-08"
:return: [{'2020-01-06': ['2020-01-06', '2020-01-12']}, {'2019-12-30': ['2019-12-30', '2020-01-05']}, ...]
"""
date_list = list()
# 截止时间
end_date = datetime.datetime.strptime(end_date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
# 起始时间所在周 - 周一和周日
start_week_monday, start_week_sunday = get_week_monday_and_sunday_by_date(start_date_str)
# 截止时间所在周 - 周一和周日
end_week_monday, end_week_sunday = get_week_monday_and_sunday_by_date(end_date_str)
if end_week_monday <= end_date:
# 结束日期 <= 给定的截止日期
date_list.append(
{end_week_monday.strftime('%Y-%m-%d'): [end_week_monday.strftime('%Y-%m-%d'),
end_week_sunday.strftime('%Y-%m-%d')]})
count = 1
while True:
week_start_time = end_week_monday - datetime.timedelta(days=7 * count) # 截止日期所在的周一,向前减7天取上一个周一
week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59) # 前一周的周日
count += 1
if week_start_time < start_week_monday:
break
date_list.append(
{week_start_time.strftime('%Y-%m-%d'): [week_start_time.strftime('%Y-%m-%d'),
week_end_time.strftime('%Y-%m-%d')]})
return date_list[::-1]
结果示例: ('2020-05-31','2020-08-01')
[{'2020-05-25': ['2020-05-25', '2020-05-31']},
{'2020-06-01': ['2020-06-01', '2020-06-07']},
{'2020-06-08': ['2020-06-08', '2020-06-14']},
{'2020-06-15': ['2020-06-15', '2020-06-21']},
{'2020-06-22': ['2020-06-22', '2020-06-28']},
{'2020-06-29': ['2020-06-29', '2020-07-05']},
{'2020-07-06': ['2020-07-06', '2020-07-12']},
{'2020-07-13': ['2020-07-13', '2020-07-19']},
{'2020-07-20': ['2020-07-20', '2020-07-26']},
{'2020-07-27': ['2020-07-27', '2020-08-02']}]
可以使用Python的calendar库来打印任意一年的日历。具体步骤如下:
import calendar
year = 2021
print(calendar.calendar(year))
该函数返回一个字符串,包含整个年份的日历,可以直接输出或写入文件。
month = 4
print(calendar.month(year, month))
该函数返回一个字符串,包含指定月份的日历。
需要注意以下细节:
示例代码:
import calendar
def print_calendar(year):
"""
打印指定年份的日历
:param year: 要打印的年份
"""
print(calendar.calendar(year))
def print_month_calendar(year, month):
"""
打印指定月份的日历
:param year: 要打印的年份
:param month: 要打印的月份
"""
print(calendar.month(year, month))
# 调用函数示例
print_calendar(2021) # 打印2021年的日历
print_month_calendar(2021, 4) # 打印2021年4月的日历
需要输入的参数:年份和月份。
输出的结果:打印整个年份或指定月份的日历。
样例输入和输出: