【问题标题】:How to get all datetime instances of the current week, given a day?给定一天,如何获取本周的所有日期时间实例?
【发布时间】:2013-06-21 01:11:58
【问题描述】:

给定一天,我想获取该天所在周的所有天(日期时间实例)。

我有一个解决方案,如果有更有效的方法有问题,请纠正我。

>>> 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)]

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

【问题讨论】:

    标签: python date datetime python-datetime


    【解决方案1】:

    我会使用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())]
    

    演示:

    >>> 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)]
    

    在 python 2 上,您可以根据需要将 range() 替换为 xrange();对于 7 天的价值,不会有太大的不同。

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

    【讨论】:

    • @MartjinPieters:感谢您的提示。我在看这个问题:stackoverflow.com/questions/2003841/…。它看起来很复杂。我认为我的方法很简单,但对此持怀疑态度。再次感谢。
    • 那里的答案也使用.weekday().isocalendar() 调用仅用于获取周数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多