python的datetime.date日期计算——计算当月第一天、当月最后一天、前月第一天、前月最后一天、次月第一天、次月最后一天、去年的当天日期等

一、各种日期计算方法

# -*- coding: utf-8 -*-
import datetime
import calendar

# 1.初始化一个datetime.date类型的日期,多种方式
# init_date = datetime.date(2008, 1, 3)   # <class 'datetime.date'>
init_date = datetime.date.today()
print('当前给定时间:', init_date)

# 2.计算给定时间的前一天
pre_date = init_date - datetime.timedelta(days=1)
print("给定时间的前一天:", pre_date)

# 3.计算给定时间的后一天
next_date = init_date + datetime.timedelta(days=1)
print("给定时间的后一天:", next_date)

# 4.计算给定时间的当月第一天
current_month_first_day = datetime.date(year=init_date.year, month=init_date.month, day=1)
print("给定时间的当月第一天:", current_month_first_day)

# 5.计算给定时间当月最后一天
# print(calendar.monthrange(2019, 10))  # (1,31)返回两个整数组成的元组,第一个是该月的第一天是星期几(按照星期一为0计算),第二个是该月的天数
current_month_last_day = datetime.date(init_date.year, init_date.month, calendar.monthrange(init_date.year, init_date.month)[1])
print("当月最后一天:",current_month_last_day)

# 6.计算给定时间的次月第一天
# 先计算当月有几天,再用当月第一天+时间间隔(间隔为:当月天数)
days_num = calendar.monthrange(init_date.year, init_date.month)[1]
first_day_of_next_month = current_month_first_day + datetime.timedelta(days=days_num)
print("给定时间的次月第一天:", first_day_of_next_month)

# 7.计算给定时间后一个月的最后一天
# 先计算次月一共多少天
days_num_of_next_month = calendar.monthrange(first_day_of_next_month.year, first_day_of_next_month.month)[1]
last_day_of_next_month = datetime.date(first_day_of_next_month.year, first_day_of_next_month.month, days_num_of_next_month)
print("给定时间的次月最后一天:", last_day_of_next_month)

# 8.计算前一个月的最后一天
# 前一个月最后一天 = 当月第一天-时间间隔1
last_day_of_pre_month = current_month_first_day - datetime.timedelta(days=1)
print("给定时间前月最后一天:", last_day_of_pre_month)

# 9.计算前一个月第一天
first_day_of_pre_month = datetime.date(last_day_of_pre_month.year, last_day_of_pre_month.month, 1)
print("给定时间前一个月的第一天:", first_day_of_pre_month)

# 10.计算给定日期去年的当天
# 计算当年第一天,减1天的时间将就是去年最后一天
first_day_of_this_year = datetime.date(init_date.year, 1, 1)
last_day_of_last_year = first_day_of_this_year - datetime.timedelta(days=1)
same_day_of_last_year = datetime.date(last_day_of_last_year.year, init_date.month, init_date.day)  # 去年同月第一天
print("去年的当天:", same_day_of_last_year)

# 11.datetime.date格式转为字符串格式
date_str = init_date.strftime("%Y-%m-%d")
print("字符串格式的日期:", date_str, type(date_str))  # <class 'str'>

# 12.字符串转日期date格式
str1 = '2019-10-11'
date1 = datetime.datetime.strptime(str1, "%Y-%m-%d").date()  
print("字符串转日期格式:", date1, type(date1))  # <class 'datetime.date'>

二、总结:

1.不要直接使用年、月的加减。即以下写法错误!!!

date_test = datetime.date(today.year-1,today.month-1,today.day-1)  #  错误方式

2.当前日期前几天、后几天,可以使用时间间隔加减。例如

today = datetime.date(2019, 2, 27)
three_days_later = today + datetime.timedelta(days=3)
print(three_days_later)  # 2019-03-02

3.计算某指定年月的月天数,使用calendar模块的monthrange方法。用法如下:

print(calendar.monthrange(2019, 10))  # (1,31)

返回两个整数组成的元组,第一个是该月的第一天是星期几(按照星期一为0计算),第二个是该月的天数。

发布了146 篇原创文章 · 获赞 66 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_38923792/article/details/102817701
今日推荐