根据日期计算当周、当月起止日期

课程设计需求,根据所选择的日期,确定所选日期当周、当月的起止日期。通过查阅学习,使用时间计算方式完成。

字符串转为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

日期:

日期的运算

  • 日期运算: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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值