如何在一天内获得当前周的所有日期时间实例?

raj*_*jpy 4 python datetime date python-datetime

鉴于有一天,我希望得到当天出现的那一周的所有日子(日期时间实例).

我有一个解决方案,如果存在错误,如果存在更有效的方法,请纠正我.

>>> import datetime
>>> today = datetime.datetime(2013, 06, 26)
>>> today
datetime.datetime(2013, 6, 26, 0, 0)
>>> day_of_week = today.isocalendar()[2] - 1
>>> day_of_week
2
>>> start_date = today - timedelta(days=day_of_week)
>>> start_date
datetime.datetime(2013, 6, 24, 0, 0) # Got monday
>>> dates = [start + timedelta(days=i) for i in range(7)]
>>> dates
[datetime.datetime(2013, 6, 24, 0, 0),
 datetime.datetime(2013, 6, 25, 0, 0),
 datetime.datetime(2013, 6, 26, 0, 0),
 datetime.datetime(2013, 6, 27, 0, 0),
 datetime.datetime(2013, 6, 28, 0, 0),
 datetime.datetime(2013, 6, 29, 0, 0),
 datetime.datetime(2013, 6, 30, 0, 0)]
Run Code Online (Sandbox Code Playgroud)

我希望星期一是开始日期,星期天是结束日期.

Mar*_*ers 12

我会用datetime.date()它来明确我们在这里计算日期,并date.weekday()用来获得当前的工作日而不是使用.isocalendar()电话,给我们一个0的工作日编号(0是星期一).

import datetime

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from pprint import pprint
>>> import datetime
>>> today = datetime.date(2013, 06, 26)
>>> pprint([today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())])
[datetime.date(2013, 6, 24),
 datetime.date(2013, 6, 25),
 datetime.date(2013, 6, 26),
 datetime.date(2013, 6, 27),
 datetime.date(2013, 6, 28),
 datetime.date(2013, 6, 29),
 datetime.date(2013, 6, 30)]
Run Code Online (Sandbox Code Playgroud)

在python 2上range(),xrange()如果你愿意,可以替换; 7天的价值不会产生太大的影响.

只是为了明确; datetime.weekday()也存在,也有.isoweekday(),所以没有必要在.isocalendar()任何地方使用.