我有以下问题:从给定日期开始,我需要找到该年的星期数,然后找到该周的开始日期和结束日期。
day1= datetime.datetime(2015,9,28)
day2= datetime.datetime(2017,12,18)
找到一周可以正常工作:
day1.isocalendar()
day2.isocalendar()
返回
(2015, 40, 1)
(2017, 51, 1)
还与某些标准日历相对应: http://whatweekisit.org/calendar-2015.html
然后我定义了以下函数:
def week_start_end(year,week):
'''Given year and week, returns the start and end day of the week
as datetime object'''
w = "%s-W%s"%(year,week)
s = datetime.datetime.strptime(w + '-1', "%Y-W%W-%w")#monday
e= datetime.datetime.strptime(w + '-0', "%Y-W%W-%w")#sunday
return (s,e)
当我使用年和周作为参数时:
week_start_end(2015,40)
week_start_end(2017,51)
返回以下内容:
(datetime.datetime(2015, 10, 5, 0, 0), datetime.datetime(2015, 10, 11, 0, 0))
(datetime.datetime(2017, 12, 18, 0, 0), datetime.datetime(2017, 12, 24, 0, 0))
如您所见,它在第2个日期运行良好,但第一个日期却运行不佳。尝试几个实例后,我意识到该函数总是比2015年晚一个星期返回,但在2016年和2017年正确返回。
我找不到办法。你能帮我吗?
答案 0 :(得分:0)
不同的星期编号约定。使用%W获得的星期数与ISO周数不同。我相信您可以使用%V来获取ISO周数,但我没有尝试过,它似乎取决于平台。
答案 1 :(得分:0)
为什么不使用库isoweek
from isoweek import Week
def week_start_end(year, week):
'''Given year and week, returns the start and end day of the week
as datetime object'''
w = Week(year, week)
s = w.monday()
e = w.sunday()
return (s,e)
最后
>>> week_start_end(2015, 40)
(datetime.date(2015, 9, 28), datetime.date(2015, 10, 4))
>>> week_start_end(2017, 51)
(datetime.date(2017, 12, 18), datetime.date(2017, 12, 24))