[本文出自天外归云的博客园]

题目:通过年月日,计算是当年的第几天

解法如下:

#!/usr/bin/python
from datetime import datetime
import time


# 方法一: 利用库函数
def ret_day_1(year, month, day):
    d = datetime(year=year, month=month, day=day)
    return d.timetuple().tm_yday


# 方法二:利用时间戳差值
def ret_day_2(year, month, day):
    s_date = f"{year-1}-12-31"
    c_date = f"{year}-{month}-{day}"
    st = int(time.mktime(datetime.strptime(s_date, "%Y-%m-%d").timetuple()))
    ct = int(time.mktime(datetime.strptime(c_date, "%Y-%m-%d").timetuple()))
    duration = ct - st
    return int(duration / 60 / 60 / 24)


# 方法三:利用闰年计算公式
def ret_day_3(year, month, day):
    m_day = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        # 闰年二月29天,全年366天
        m_day[2] = 29
    days = 0
    for i in range(month):
        days += m_day[i]
    days += day
    return days


r1 = ret_day_1(2022, 6, 30)
r2 = ret_day_2(2022, 6, 30)
r3 = ret_day_3(2022, 6, 30)
print(r1, r2, r3)