python练习100【004】:这天第几天

题目:
输入某年某月某日,判断这一天是这一年的第几天?

#!/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-182021年的第 2912021-01-01 00:00:00
291.0
2021-10-182021年的第291天


请输入日期(格式为:YYYY-MM-DD): 
1992-10-18
1992-10-18是该年的第 292
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值