问题:输入一个日期,包括年、月和日,计算该日期是这一年的第几天。
思路:输入年月日之后,这是这一年中的第几天 = 之前月数的总天数+当月的日子
先想一下如果是手动算的话需要怎么算?
通常的年份的2月份都是28天,如果是闰年,闰年的2月份是29天。
比如输入一个2022-10-13
计算应该是:1(31)+2(28或者29天)+3(31)+4(30)+5(31)+6(30)+7(31)+8(31)+9(30)+13
比如输入一个2022-07-13
计算应该是:1(31)+2(28或者29天)+3(31)+4(30)+5(31)+6(30)+13
比如输入一个2022-03-13
计算应该是:1(31)+2(28或者29天)+13
可以看到这个是一个月份的累加,中间没有间断,如果要计算10月的就要从1月加到9月。
这个适合python中的 range()函数,然后里面是一个循环的累加
方法1:
#
date=input("请输入年月日(格式举例:2000-01-05):")
year=int(date[:4])
month=int(date[5:7])
day=int(date[8:10])
f_run=[31,28,31,30,31,30,31,31,30,31,30,31] #通常的年的每个月的天数
tall_day=0
#判断年是否闰年?
if (year%4==0 and year%100!=0 or year%400==0) and month>2:
for i in range(month-1):
tall_day+=f_run[i]
tall_day+=1 #如果是闰年并且是3月份以后,需要增加1天
else:
for i in range(month-1):
tall_day+=f_run[i]
tall_day+=day
print(date+"是当年的第"+str(tall_day)+"天")
例子:输入:2020-04-19,输出:110天
输入:2022-02-03,输出:34天
输入:2022-03-15,输出:74天
输入:2000-03-01,输出:61天
方法2: 通过datetime库函数实现
import datetime
date=input("请输入年月日(格式举例:2000-01-05):")
year=int(date[:4])
month=int(date[5:7])
day=int(date[8:10])
date1 = datetime.date(year=int(year), month=int(month), day=int(day))
date2 = datetime.date(year=int(year), month=1, day=1)
tall_day = (date1 - date2).days + 1
print(date+"是当年的第"+str(tall_day)+"天")
方法3:通过datetime库函数实现
from datetime import datetime
cdate=input("请输入年月日(格式举例:2000-01-05):")
end=datetime.strptime(cdate, "%Y-%m-%d")
start = datetime(end.year,1,1)
tall_day = (end - start).days + 1
print(cdate+"是当年的第"+str(tall_day)+"天")