【问题标题】:A simpler way of finding the start of the week for any start day查找任何开始日的一周开始的更简单方法
【发布时间】:2017-02-04 05:29:39
【问题描述】:

给定这两个变量,我们需要找到一周的开始时间(日期时间):

  1. now - 当前日期时间
  2. START_DAY - 我们认为是“一周的开始”的一周中的哪一天(0-6,其中 0 是星期一,6 是星期日)

我们可以使用循环,但是对于一个简单的问题来说,这似乎步骤太多了:

week_start = datetime(now.year, now.month, now.day)
while week_start.weekday() != START_DAY:
    week_start = week_start - timedelta(days=1)

如果START_DAY 总是0(星期一),这真的很容易:

week_start = datetime(now.year, now.month, now.day) - timedelta(days=now.weekday())

或者总是6(星期日):

week_start = datetime(now.year, now.month, now.day) - timedelta(days=(0 if now.weekday() == START_DAY else now.weekday() + 1))

对于START_DAY 的任何值,计算一周开始的简单方法是什么?

【问题讨论】:

    标签: python python-3.x datetime optimization


    【解决方案1】:

    START_DAYnow 之间的天数是now.weekday() - START_DAY。但是,如果今天在 START_DAY 之前(例如,如果今天是星期三,START_DATE 是 6 = 星期日),则该数字将为负数,从今天减去它会得到未来的日期。

    由于您可能不希望这样,因此您需要模 7 的差值:

    week_start = now.date() - timedelta(days=(now.weekday() - START_DAY) % 7)
    

    例子:

    >>> from datetime import datetime, timedelta
    >>> now = datetime(2017, 2, 1)
    >>> print(now.strftime("%d/%m/%y (%a)"))
    01/02/17 (Wed)
    >>> for START_DAY in range(7):
    ...     start_week = now.date() - timedelta(days=(now.weekday() - START_DAY) % 7)
    ...     print(start_week.strftime("%d/%m/%y (%a)"))
    ... 
    30/01/17 (Mon)
    31/01/17 (Tue)
    01/02/17 (Wed)
    26/01/17 (Thu)
    27/01/17 (Fri)
    28/01/17 (Sat)
    29/01/17 (Sun)
    

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多