题目:
输入某年某月某日,判断这一天是这一年的第几天?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: python练习100——【004】这天第几天
Description : python practice
Author : zhangzx
date: 2020-12-04
-------------------------------------------------
Change Activity:
2020-02-19
-------------------------------------------------
"""
from datetime import datetime
while True:
try:
date = input('请输入日期(格式为:YYYY-MM-DD): \n')
date = datetime.strptime(date,'%Y-%m-%d')
#strptime():用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。
#转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:
break
except ValueError:
print('你输入得日期格式有误,请重新输入')
# 解法一:
year_1 = int(date.year)
if year_1%400==0 or (year_1%4==0 and year_1%100!=0):
print( str(year_1) + "是闰年,一年有366天:")
dd=[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
sum_1 = 0
for i in range(date.month-1):
sum_1 += dd[i]
days_1 = sum_1 + date.day
print('%s 是 %s年的第 %d 天'%(date.strftime('%Y-%m-%d'),date.strftime('%Y'),days_1))
else:
print( str(year_1) + "不是闰年,一年有365天:")
dd_1=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
sum_2 = 0
for i in range(date.month-1):
sum_2 += dd_1[i]
days_2 = sum_2 + date.day
print('%s 是 %s年的第 %d 天'%(date.strftime('%Y-%m-%d'),date.strftime('%Y'),days_2))
print('\n\n')
# 解法二:
date1 = datetime.strptime(str(date.year) + '-1-1','%Y-%m-%d') # 把日期变为XXXX-01-01
days = 1+(date.timestamp()-date1.timestamp())/(24*3600) #timestamp()是时间戳函数,以1970为基础,不管是否闰年,都可以计算(秒为单位)。
print('%s 是 %s年的第 %d 天'%(date.strftime('%Y-%m-%d'),date.strftime('%Y'), days))
# 解法三
import time
while True:
try:
date = input('请输入日期(格式为:YYYY-MM-DD): \n')
a=time.strptime(date,'%Y-%m-%d')
print(date + '是该年的第 %d 天'%(a[7]))
break
except ValueError:
print('你输入得日期格式有误,请重新输入')
-------------------------以下是输出-----------------------------
请输入日期(格式为:YYYY-MM-DD):
2021-10-18
2021不是闰年,一年有365天:
2021-10-18 是 2021年的第 291 天
2021-01-01 00:00:00
291.0
2021-10-18是2021年的第291天
请输入日期(格式为:YYYY-MM-DD):
1992-10-18
1992-10-18是该年的第 292 天