课程设计需求,根据所选择的日期,确定所选日期当周、当月的起止日期。通过查阅学习,使用时间计算方式完成。
字符串转为date格式
- 使用datetime.date方法。照搬使用,原理暂不详。
dateChoice = '2021-06-26' # 以此日期为坐标,查找周一周日月初月末日期
dateC = datetime.date(*map(int, dateChoice.split('-'))) # 改成date格式,以供运算
print(dateC,type(dateC))
##输出:
##2021-06-26 <class 'datetime.date'>
确定周几
- date参数的weekday()方法可以返回周几。周一返回0,周日返回6,依此类推。
dateChoice = '2021-06-26' # 以此日期为坐标,查找周一周日月初月末日期
dateC = datetime.date(*map(int, dateChoice.split('-'))) # 改成date格式,以供运算
print(dateC.weekday())
##输出:
##5
日期:
![](https://i-blog.csdnimg.cn/blog_migrate/a79ab88b5f30f1838a8ce994a2e69421.png)
日期的运算
- 日期运算:datetime.timedelta() 方法
根据逻辑即可计算出需要的日期
dateChoice = '2021-06-26' # 以此日期为坐标,查找周一周日月初月末日期
dateC = datetime.date(*map(int, dateChoice.split('-'))) # 改成date格式,以供运算
dateMonday = dateC - datetime.timedelta(days = dateC.weekday()) #周一日期
dateSunday = dateMonday + datetime.timedelta(days = 6) # 周日日期
dateMonthFirst = dateC - datetime.timedelta(days = dateC.day-1) # 月初日期
dateTemp = dateC.replace(day=28) + datetime.timedelta(days=4) # 不要耍小聪明将28改为31,当出现6月31日时会出现错误
dateMonthLast = dateTemp - datetime.timedelta(days=dateTemp.day) # 月末日期
print(dateMonday, type(dateMonday))
print(dateSunday, type(dateSunday))
print(dateMonthFirst, type(dateMonthFirst))
print(dateMonthLast, type(dateMonthLast))
##输出:
##2021-06-21 <class 'datetime.date'>
##2021-06-27 <class 'datetime.date'>
##2021-06-01 <class 'datetime.date'>
##2021-06-30 <class 'datetime.date'>
将日期由date类型转为string类型
- 使用date类的strftime()方法
dateMondayStr = dateMonday.strftime('%Y-%m-%d')
print(dateMondayStr, type(dateMondayStr))
##输出:
2021-06-21 <class 'str'>
完整学习代码
import datetime
dateChoice = '2021-06-26' # 以此日期为坐标,查找周一周日月初月末日期
dateC = datetime.date(*map(int, dateChoice.split('-'))) # 改成date格式,以供运算
# print(dateC,type(dateC))
# print(dateC.weekday())
dateMonday = dateC - datetime.timedelta(days = dateC.weekday()) #周一日期
dateSunday = dateMonday + datetime.timedelta(days = 6) # 周日日期
dateMonthFirst = dateC - datetime.timedelta(days = dateC.day-1) # 月初日期
dateTemp = dateC.replace(day=28) + datetime.timedelta(days=4) # 不要耍小聪明将28改为31,当出现6月31日时会出现错误
dateMonthLast = dateTemp - datetime.timedelta(days=dateTemp.day) # 月末日期
# print(dateMonday, type(dateMonday))
# print(dateSunday, type(dateSunday))
# print(dateMonthFirst, type(dateMonthFirst))
# print(dateMonthLast, type(dateMonthLast))
dateMondayStr = dateMonday.strftime('%Y-%m-%d')
# print(dateMondayStr, type(dateMondayStr))