繁体   English   中英

获取周一和周日以及去年的周一和周日,同一周

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM