在Python中判断输入日期是当年的第几天,可以通过以下两种主要方法实现:
一、使用datetime
模块(推荐)
利用datetime
模块的timedelta
类,通过计算目标日期与当年12月31日的差值,快速获取天数。
示例代码:
import datetime
def day_of_year(year, month, day):
target_date = datetime.date(year, month, day)
start_of_year = datetime.date(year, 1, 1)
delta = target_date - start_of_year
return delta.days + 1 # 加1是因为1月1日是第1天
# 输入处理
year = int(input('请输入年份: '))
month = int(input('请输入月份: '))
day = int(input('请输入日期: '))
# 验证输入(可选)
if 1 <= month <= 12 and 1 <= day <= 31:
# 进一步验证月份天数(如闰年2月)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2 and is_leap_year(year):
days_in_month = 29
result = day_of_year(year, month, day)
print(f'{year}-{month:02d}-{day:02d} 是 {year} 年的第 {result} 天。')
else:
print('输入的日期无效。')
二、手动计算(无需模块)
通过累加前几个月的天数,再加上目标月份的天数,判断是否为闰年调整2月天数。
示例代码:
def is_leap_year(year):
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
def day_of_year_manual(year, month, day):
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if is_leap_year(year):
days_in_month = 29
total_days = sum(days_in_month[:month - 1]) + day
return total_days
# 输入处理
year = int(input('请输入年份: '))
month = int(input('请输入月份: '))
day = int(input('请输入日期: '))
# 验证输入(可选)
if 1 <= month <= 12 and 1 <= day <= days_in_month[month - 1] if is_leap_year(year) else 28:
result = day_of_year_manual(year, month, day)
print(f'{year}-{month:02d}-{day:02d} 是 {year} 年的第 {result} 天。')
else:
print('输入的日期无效。')
说明:
-
推荐方法 :使用
datetime
模块更简洁高效,适合快速开发。 -
手动计算 :适合学习算法逻辑,但需注意边界条件(如闰年2月天数)。
-
输入验证 :建议添加月份和日期范围检查,避免无效输入。