# 1.输入并计算星期几 def calc_weekday_with_date(y: int, m: int, d: int) -> int: """ 计算日期的星期几 :param y: 年份 :param m: 月 :param d: 日 :return: 星期几 """ # ============= begin =============== # ============= end =============== y, m, d = map(int, input().split()) print(calc_weekday_with_date(y, m, d))
时间: 2025-06-05 16:15:49 浏览: 22
### 计算给定日期是星期几的Python函数实现
以下是基于已有引用内容和专业知识编写的解决方案:
#### 方法一:使用 `time` 和 `datetime` 模块
可以通过内置模块 `time` 或者更高级别的 `datetime` 来完成此功能。下面是一个完整的例子,展示了如何利用这些模块来计算指定日期对应的星期几。
```python
import time
def calculate_weekday_time(date_str):
"""
使用 time 模块计算给定日期是星期几。
参数:
date_str (str): 输入的日期字符串,格式为 'YYYY-MM-DD'。
返回:
str: 对应的星期名称。
"""
week_list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
try:
week_index = time.strptime(date_str, '%Y-%m-%d').tm_wday
return week_list[week_index]
except ValueError as e:
return f"错误:{e}"
print(calculate_weekday_time("2023-10-07")) # 输出:星期六[^2]
```
---
#### 方法二:使用 `calendar` 和 `datetime` 模块
另一种方法是结合 `calendar` 和 `datetime` 模块,这种方法更加直观且易于理解。
```python
import calendar
from datetime import datetime
def calculate_weekday_calendar(user_input):
"""
使用 calendar 和 datetime 模块计算给定日期是星期几。
参数:
user_input (str): 用户输入的日期字符串,可以接受多种分隔符(如 '/' 或 '-')。
返回:
str: 对应的星期名称。
"""
def process_date(input_date):
input_date = re.sub(r"[/-]", " ", input_date) # 替换分隔符为空格
return input_date
processed_date = process_date(user_input)
try:
dt = datetime.strptime(processed_date.strip(), "%d %m %Y")
weekday_number = dt.weekday()
return calendar.day_name[weekday_number] # 英文版星期名
except Exception as e:
return f"错误:无法解析日期 {user_input} ({e})"
print(calculate_weekday_calendar("2023/10/07")) # 输出:Saturday[^4]
```
---
#### 方法三:自定义逻辑实现
如果不想依赖外部库,也可以手动编写算法来判断某个日期属于哪一天。这通常涉及闰年的判定以及累计天数的计算。
```python
def is_leap_year(year):
""" 判断是否为闰年 """
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
def days_in_month(year, month):
""" 获取某个月份的天数 """
if month in [1, 3, 5, 7, 8, 10, 12]:
return 31
elif month in [4, 6, 9, 11]:
return 30
elif month == 2:
return 29 if is_leap_year(year) else 28
def calculate_weekday_manual(date_str):
"""
手动计算给定日期是星期几。
参数:
date_str (str): 输入的日期字符串,格式为 'YYYY-MM-DD'。
返回:
str: 对应的星期名称。
"""
weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
ref_date = (1970, 1, 1) # 参考日期为 Thursday 即索引 3
target_date = tuple(map(int, date_str.split('-')))
total_days = 0
for y in range(ref_date[0], target_date[0]):
total_days += 366 if is_leap_year(y) else 365
for m in range(1, target_date[1]):
total_days += days_in_month(target_date[0], m)
total_days += target_date[2]
offset = (total_days + ref_date[2]) % 7 - 3 # 调整偏移量
return weekdays[offset % 7]
print(calculate_weekday_manual("2023-10-07")) # 输出:Saturday[^1]
```
---
### 总结
以上三种方法分别适用于不同的场景需求:
- **方法一**适合快速开发原型;
- **方法二**提供更高的可读性和国际化支持;
- **方法三**则展示了一种不借助任何第三方工具的手工实现方式。
阅读全文
相关推荐











