如何使用Python获取当前周?

Rya*_*ery 11 python datetime calendar

使用Python ...

如何获取特定周的日期列表?

就像是...

{
'1' : ['01/03/2010','01/04/2010','01/05/2010','01/06/2010','01/07/2010','01/08/2010','01/09/2010'],  
'2' : ['01/10/2010','01/11/2010','01/12/2010','01/13/2010','01/14/2010','01/15/2010','01/16/2010'] 
}
Run Code Online (Sandbox Code Playgroud)

此示例中字典的关键字是周数.

Esc*_*alo 17

谨防!如果你想定义你自己的周数,你可以使用第一个问题中提供的生成器表达式,顺便说一下,得到了一个很棒的答案).如果您想遵循周年纪念的ISO约定,您需要小心:

一年中的第一个日历周是包含该年第一个星期四的日历周,而日历年的最后一个日历周是紧接在下一个日历年的第一个日历周之前的那一周.

因此,例如,2010年1月1日和2日不是2010年第一周,而是2009年第53周.

Python提供了一个使用ISO日历查找周数的模块:

示例代码:

h[1] >>> import datetime
h[1] >>> Jan1st = datetime.date(2010,1,1)
h[1] >>> Year,WeekNum,DOW = Jan1st.isocalendar() # DOW = day of week
h[1] >>> print Year,WeekNum,DOW
2009 53 5
Run Code Online (Sandbox Code Playgroud)

再次注意,2010年1月1日对应于2009年第53周.

使用前一个答案中提供的生成器:

from datetime import date, timedelta


def allsundays(year):
    """This code was provided in the previous answer! It's not mine!"""
    d = date(year, 1, 1)                    # January 1st                                                          
    d += timedelta(days = 6 - d.weekday())  # First Sunday                                                         
    while d.year == year:
        yield d
        d += timedelta(days = 7)

Dict = {}
for wn,d in enumerate(allsundays(2010)):
    # This is my only contribution!
    Dict[wn+1] = [(d + timedelta(days=k)).isoformat() for k in range(0,7) ]

print Dict
Run Code Online (Sandbox Code Playgroud)

Dict包含您请求的字典.


小智 5

您如何确定星期?在这里,我使用一个函数来确定该周中的某天,该函数获取该周中的星期日(在示例中使用的周日),然后返回它加上接下来的6天。

import datetime

one_day = datetime.timedelta(days=1)

def get_week(date):
  """Return the full week (Sunday first) of the week containing the given date.

  'date' may be a datetime or date instance (the same type is returned).
  """
  day_idx = (date.weekday() + 1) % 7  # turn sunday into 0, monday into 1, etc.
  sunday = date - datetime.timedelta(days=day_idx)
  date = sunday
  for n in xrange(7):
    yield date
    date += one_day

print list(get_week(datetime.datetime.now().date()))
# [datetime.date(2010, 1, 3), datetime.date(2010, 1, 4),
#  datetime.date(2010, 1, 5), datetime.date(2010, 1, 6),
#  datetime.date(2010, 1, 7), datetime.date(2010, 1, 8),
#  datetime.date(2010, 1, 9)]
print [d.isoformat() for d in get_week(datetime.datetime.now().date())]
# ['2010-01-03', '2010-01-04', '2010-01-05', '2010-01-06', '2010-01-07',
#  '2010-01-08', '2010-01-09']
Run Code Online (Sandbox Code Playgroud)