【问题标题】:Build array of dates in last week, this week and next week建立上周、本周和下周的日期数组
【发布时间】:2013-07-10 19:27:35
【问题描述】:

我经常在 Python 中遇到有关日期的问题。在我的 web 应用程序中,我想显示日历三周中的每一天:上周、当前周和下周,星期一表示一周的开始。

我目前处理此问题的方式是退回日期,直到我到达星期一,然后再减去 7 天,然后再加 20 天以建立三周范围......但这感觉 真的 笨重。

Python 是否有一个星期的概念,还是我必须手动将它与几天相结合?

编辑:现在我把它编码出来,它并不太可怕,但我想知道是否没有更好的东西,再次用几周而不是几天的概念。

today = datetime.date.today()
last_monday = today - datetime.timedelta(days=today.weekday()) - datetime.timedelta(days=7)
dates = [last_monday + datetime.timedelta(days=i) for i in range(0, 21)]

【问题讨论】:

    标签: python date datetime python-datetime


    【解决方案1】:

    The datetime module 支持这样的操作:

    oneDay = datetime.timedelta(days=1)
    oneWeek = datetime.timedelta(days=7)
    

    您可以对它们使用标准数学:

    today = datetime.date.today()
    lastMonday = today - datetime.timedelta(days=today.weekday())
    
    lastWeek = lastMonday - oneWeek
    nextWeek = lastMonday + oneWeek
    

    【讨论】:

      【解决方案2】:

      不,差不多就是这样。但是基于datetime.date.weekday() 结果的列表理解应该很容易:

      today = datetime.date(2013, 06, 26)
      dates = [today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())]
      

      请记住,范围没有从 0 开始。:-)

      演示:

      >>> import datetime
      >>> from pprint import pprint
      >>> today = datetime.date(2013, 07, 12)
      >>> pprint([today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())])
      [datetime.date(2013, 7, 1),
       datetime.date(2013, 7, 2),
       datetime.date(2013, 7, 3),
       datetime.date(2013, 7, 4),
       datetime.date(2013, 7, 5),
       datetime.date(2013, 7, 6),
       datetime.date(2013, 7, 7),
       datetime.date(2013, 7, 8),
       datetime.date(2013, 7, 9),
       datetime.date(2013, 7, 10),
       datetime.date(2013, 7, 11),
       datetime.date(2013, 7, 12),
       datetime.date(2013, 7, 13),
       datetime.date(2013, 7, 14),
       datetime.date(2013, 7, 15),
       datetime.date(2013, 7, 16),
       datetime.date(2013, 7, 17),
       datetime.date(2013, 7, 18),
       datetime.date(2013, 7, 19),
       datetime.date(2013, 7, 20),
       datetime.date(2013, 7, 21)]
      

      【讨论】:

      • 弯曲范围比我以前聪明一点。
      【解决方案3】:

      我想干净和自我记录的解决方案是:

      import datetime
      
      today = datetime.date.today()
      start_day = today - datetime.timedelta(today.weekday() + 7)
      three_weeks = [start_day + datetime.timedelta(x) for x in range(21)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多