[英]how to get week date range (Monday-Sunday) for a date following in between that week(Monday-Sunday)
[英]Get Monday and Sunday and last year's Monday and Sunday, same week
鉴于datetime.datetime.now(),考虑到闰年,我如何得到本周的周一 - 周日,然后是去年的同一周一 - 周日?
我的一个想法是获得-365天的timedelta,然后找到最近的星期一或星期日。 我相信有更好的方法。
编辑:我不介意使用datetuil,如果有什么东西让这更容易。
如果使用dateutil不是问题,只需使用它:)
relativedelta是您需要的对象在这里您可以将一年减去当前日期。
from datetime import *
from dateutil.relativedelta import *
NOW = datetime.now()
last_monday = NOW+relativedelta(years=-1, weekday=MO)
last_sunday = NOW+relativedelta(years=-1, weekday=SU)
如果今年的这个星期一有N日,那么去年同一个星期一的日期为N + 1,如果之间没有2月29日,否则去年的星期一将有N + 2日期。
from datetime import date, timedelta
today = date.today()
monday = today - timedelta(today.weekday())
sunday = monday + timedelta(6);
print monday, '-', sunday
monday_last_year = monday - timedelta(364) # We are trying to go to date N + 1.
if monday_last_year.weekday() == 1: # It will be either 0 or 1.
monday_last_year + timedelta(1) # This is date N + 2.
sunday_last_year = monday_last_year + timedelta(6)
print monday_last_year, '-', sunday_last_year
from datetime import date, timedelta
monday = date.today() - timedelta(days=date.today().weekday())
sunday = monday + timedelta(days=6)
第二个问题的答案可能取决于什么算作“同一个”星期一 - 星期日。 我会从天真的版本开始并调整它是否不正确:
last_year_mon = monday - timedelta(weeks=52)
last_year_sun = last_year_mon + timedelta(days=6)
您可以使用.isocalendar()
来检索当年的周数,然后从那里获得当前和上一年的那周的星期一/星期日。
year, week, _ = datetime.datetime.now().isocalendar()
然后,使用此答案中的 iso_to_gregorian
:
this_sunday = iso_to_gregorian(year, week, 0)
this_monday = iso_to_gregorian(year, week, 1)
last_year_sunday = iso_to_gregorian(year - 1, week, 0)
last_year_monday = iso_to_gregorian(year - 1, week, 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.