如何使用Python获取当前周?
使用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
字典包含了你请求的内容。