问题:输入一个日期,包括年、月和日,计算该日期是这一年的第几天。
思路:输入年月日之后,这是这一年中的第几天 = 之前月数的总天数+当月的日子
先想一下如果是手动算的话需要怎么算?
通常的年份的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)+"天")