【问题标题】:Get start date and end date of the week, given week number and year给定周数和年份,获取一周的开始日期和结束日期
【发布时间】:2015-06-04 23:40:45
【问题描述】:

在 python 中给定周数和年份,如何获取一周的开始日期和结束日期?

我试过了:

def get_start_end_dates(year, week):

     dlt = timedelta(days = (week - 1) * 7)
     d = date(year, 1, 1)
     return d + dlt, d + dlt + timedelta(days=6)

但是有了这个函数,我假设一年的第一周从星期一开始。

【问题讨论】:

标签: python


【解决方案1】:

我已经修复了你的功能:

def get_start_end_dates(year, week):
     d = date(year,1,1)
     if(d.weekday()<= 3):
         d = d - timedelta(d.weekday())             
     else:
         d = d + timedelta(7-d.weekday())
     dlt = timedelta(days = (week-1)*7)
     return d + dlt,  d + dlt + timedelta(days=6)

它获取给定年份一周的正确开始和结束日期。

它还假设一年中第一天在周五、周六或周日的年份在下周有 1 周。见这里:http://en.wikipedia.org/wiki/Week

【讨论】:

  • 这个解决方案非常值得!该代码适用于 Python 3.5.2
  • 如果我想将星期日作为第一天,星期六作为最后一天怎么办?
【解决方案2】:

最简单(替代)解决方案

首先安装 isoweek 包

pip install isoweek

from isoweek import Week

w = Week(2021, 1)

print ("Week %s starts on %s" % (w, w.monday()))
print ("Week %s ends on %s" % (w, w.sunday()))

输出:

Week 2021W01 starts on 2021-01-04
Week 2021W01 ends on 2021-01-10

奖金:

如果您需要将此功能应用于 pandas 数据帧

df["start_of_wk"] = df.apply(lambda x: Week(x['Year'], x['wk_of_the_year']).monday(), axis=1)

df["end_of_wk"] = df.apply(lambda x: Week(x['Year'], x['wk_of_the_year']).sunday(), axis=1)

【讨论】:

    【解决方案3】:
    import datetime
    import time
    
     def getDateRangeFromWeek(p_year,p_week):
    
        firstdayofweek = datetime.datetime.strptime(f'{p_year}-W{int(p_week )- 1}-1', "%Y-W%W-%w").date()
        lastdayofweek = firstdayofweek + datetime.timedelta(days=6.9)
        return firstdayofweek, lastdayofweek
    
    
    #Call function to get dates range 
    firstdate, lastdate =  getDateRangeFromWeek('2019','2')
    
    print('print function ',firstdate,' ', lastdate)
    

    【讨论】: