我们在python日常使用中经常会用到时间的各种计算,这个也是让人头疼的地方,下面的方法实现了 年末,月末,季末的日期和距指定时间的天数的计算,要的拿去。自己也做个笔记。后面直接用。
def last_day(any_day):
"""
获取获得一个月未,季末,年未的天数 的最后一天
:param any_day: 任意日期
:return: <class 'datetime.date'年,月,季末的日期,距年末,月末,季末的天数
"""
next_month = any_day.replace(day=28) + datetime.timedelta(days=4) # this will never fail
last_day_month = next_month - datetime.timedelta(days=next_month.day)
x = None
if any_day.month>9:
x = any_day.replace(month=12,day=31)
elif any_day.month>6:
x = any_day.replace(month=9, day=30)
elif any_day.month >3:
x = any_day.replace(month=6, day=30)
else:
x = any_day.replace(month=3, day=31)
last_day_quarter = x
last_day_year = any_day.replace(month=12,day=31)
ret = {
"year":(last_day_year,(last_day_year-any_day).days),
"month":(last_day_month,(last_day_month-any_day).days),
"quarter":(last_day_quarter,(last_day_quarter-any_day).days),
}
return ret
if __name__ == "__main__":
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day
res = last_day(datetime.date(year, 2, day))
print(type(res),res)
=output============
<class 'dict'> {'year': (datetime.date(2020, 12, 31), 313), 'month': (datetime.date(2020, 2, 29), 7), 'quarter': (datetime.date(2020, 3, 31), 38)}