【问题标题】:How to get the Python date object for last Wednesday如何获取上周三的 Python 日期对象
【发布时间】:2010-03-04 18:36:55
【问题描述】:

我想使用 Python 查找上周三的日期对象。我可以使用 isocalendar 找出今天在日历上的哪个位置,并确定我们是否需要返回一周才能回到前一个星期三。但是,我不知道如何使用该信息创建一个新的日期对象。本质上,我需要弄清楚如何从 iso 日历元组创建日期。

from datetime import date
today = date.today()
if today.isocalendar()[2] > 3: #day of week starting with Monday
    #get date for Wednesday of last week
else:
    #get date for Wednesday of this current week

【问题讨论】:

  • 如果今天是星期三,请明确说明该怎么做。 ISO 日历是否与您的问题相关,或者它只是您尝试解决方案的产物?
  • 只是一个神器。 DisplacedAussie 把它钉在了头上。

标签: python datetime date


【解决方案1】:

我想你想要这个。如果指定的日期是星期三,它会给你那一天。

from datetime import date
from datetime import timedelta
from calendar import WEDNESDAY

today = date.today()
offset = (today.weekday() - WEDNESDAY) % 7
last_wednesday = today - timedelta(days=offset)

例如,三月每一天的最后一个星期三:

for x in xrange(1, 32):
    today = date(year=2010, month=3, day=x)
    offset = (today.weekday() - WEDNESDAY) % 7
    last_wednesday = today - timedelta(days=offset)

    print last_wednesday

【讨论】:

    【解决方案2】:

    假设“上周三”不能与“今天”相同,这说明如何在一周中的任何一天进行:

    >>> from datetime import date
    >>> from datetime import timedelta
    >>>
    >>> MON, TUE, WED, THU, FRI, SAT, SUN = range(7)
    >>>
    >>> def lastWday(adate, w):
    ...     """Mon:w=0, Sun:w=6"""
    ...     delta = (adate.weekday() + 6 - w) % 7 + 1
    ...     return adate - timedelta(days=delta)
    ...
    >>> for x in range(8, 16):
    ...     start = date(year=2010, month=3, day=x)
    ...     prev = lastWday(start, WED)
    ...     print start, start.weekday(), prev, prev.weekday()
    ...
    2010-03-08 0 2010-03-03 2
    2010-03-09 1 2010-03-03 2
    2010-03-10 2 2010-03-03 2
    2010-03-11 3 2010-03-10 2
    2010-03-12 4 2010-03-10 2
    2010-03-13 5 2010-03-10 2
    2010-03-14 6 2010-03-10 2
    2010-03-15 0 2010-03-10 2
    

    【讨论】:

    • 这很有帮助。通常如果我在星期二运行一个程序并且我想知道“上星期二”是什么,我的意思不是“今天”。我的意思是完成的那个……那应该是一周前。这个答案使我能够消除代码中的“if”语句。
    【解决方案3】:

    阅读http://docs.python.org/library/datetime.html

    使用 date2 = date1 - timedelta(days=1) 和 date.isoweekday() 编写您自己的函数,在 isoweek 不等于 3(星期三)时迭代前几天

    【讨论】:

    • 考虑到最大比较次数很少,这似乎有点苛刻,他要求一个函数来获取上个 wensday 可能不会经常被调用(我同意我把一些东西放在一起太快了。
    【解决方案4】:

    我不确定这是否符合您的要求,但它应该让您最接近给定日期的星期三与给定日期在同一周的星期三,假设周从星期一开始:

    import datetime
    
    def find_closest_wednesday(date):
        WEDNESDAY = 3
        year, week, day  = date.isocalendar()
        delta = datetime.timedelta(days=WEDNESDAY-day)
        return date + delta
    
    today = datetime.date.today()
    print 'Today: ', today
    print 'Closest Wendesday: ', find_closest_wednesday(today)
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      相关资源
      最近更新 更多