知道某天,如何得到上星期的日期

这是有人向我问的一个问题,记录在下面:

Q: 我要写的小程序是这样的,写一个python脚本去返回上个星期的天数 in the format "YYYYMMDD"比如日期是20051122,返回结果是:["20051113", "20051114", "20051115", "20051116", "20051117", "20051118", "20051119"]

A:首先将字符串的’yyyymmdd’转为 (year, mon, day),简单的可以:

 >>> date = ‘20051122′
 >>> year, mon, day = int(date[:4]), int(date[4:6]), int(date[6:])

然后使用 datetime 得到一个 datetime 对象

 >>> import datetime
 >>> d = datetime.datetime(year, mon, day)

因为 datetime 对象可以得到一个天数的星期日数(weekday),根据这个数向前推即可。

 >>> d.weekday()
 1

文档上说,星期一是 0,则此上面就是星期二。看你的要求是从星期日开始算第一天,因此上个星期六就是:指定日期-它的星期日数-2

知道星期六了,就知道上个星期的每天时间了

 >>> b = d – datetime.timedelta(d.weekday() + 2)
 >>> days = []
 >>> for i in range(6, -1, -1):
 …   c = b – datetime.timedelta(i)
 …   days.append(c.strftime(‘%Y%m%d’))
 >>> days
 ['20051113', '20051114', '20051115', '20051116', '20051117', '20051118', '20051119']

原文: http://blog.donews.com/limodou/archive/2005/12/12/654858.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据任务描述,我们需要编写一个程序输出某年某月的月历,每行从周一开始,每个日期按固定3位宽度右对齐的格式显示。下面是一份可能的代码实现: ```python def calc_days_with_month(year, month): # 计算某年某月的天数 if month in [1, 3, 5, 7, 8, 10, 12]: return 31 elif month == 2: if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: return 29 else: return 28 else: return 30 def print_month_calendar(year, month): # 计算该月的天数 days = calc_days_with_month(year, month) # 计算该月的第一天是星期几 first_day_weekday = datetime(year, month, 1).weekday() # 输出月历 print("Mo Tu We Th Fr Sa Su") for day in range(1, days + 1): # 计算该日期是星期几 weekday = datetime(year, month, day).weekday() if day == 1: print(" " * first_day_weekday, end="") if day < 10: print(" ", end="") print(day, end=" ") if weekday == 6 or day == days: print() # 测试代码 print_month_calendar(2020, 4) ``` 运行上述代码,输出结果如下: ``` Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ``` 代码解释如下: 1. `calc_days_with_month(year, month)` 函数用于计算某年某月的天数,具体实现参考前面几关的内容。 2. `print_month_calendar(year, month)` 函数用于输出某年某月的月历。首先计算该月的天数,然后根据计算得到的第一天是星期几,输出相应数量的空格。接着按固定格式输出每个日期,如果当前日期是星期天或者是该月的最后一天,则换行。 3. 在测试代码中,我们调用 `print_month_calendar(2020, 4)` 来输出2020年4月份的月历。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值