如何使用Python获取当前周?

15 投票
7 回答
37047 浏览
提问于 2025-04-15 17:38

使用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'] 
}

在这个例子中,字典的键就是周数。

7 个回答

4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某些功能没有按预期工作,这时候就需要去查找原因。

通常,我们可以在网上找到很多相关的讨论和解决方案,比如在StackOverflow这个网站上。这个网站上有很多开发者分享他们的经验和解决问题的方法。

当你看到一个问题时,可能会有很多人给出不同的答案。有些答案可能很复杂,但其实有时候简单的解决方案就能解决问题。

所以,如果你在编程时遇到问题,不妨去看看这些讨论,可能会找到你需要的答案。

current_week = datetime.datetime.now().isocalendar()[1]
8

你是怎么确定一周的呢?这里我用的是一周中的某一天来识别这周,使用一个函数来获取这一周的星期天(你在例子中用的那个),然后返回这个星期天加上接下来的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']
21

注意!如果你想定义自己的周数,可以使用你在第一个问题中提供的生成器表达式,顺便说一下,那个问题得到了很棒的回答。如果你想按照国际标准(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

再提醒一下,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

字典包含了你请求的内容。

撰写回答