代码之家  ›  专栏  ›  技术社区  ›  Joe

用python查找星期一的日期

  •  52
  • Joe  · 技术社区  · 15 年前

    如何使用python根据当前日期查找上一个星期一的日期?我想也许我可以用: datetime.weekday() 去做,但我被卡住了。

    我基本上想找到今天的日期和星期一的日期,在django中构造一个日期范围查询,使用: created__range=(start_date, end_date) .

    8 回复  |  直到 7 年前
        1
  •  136
  •   ChristopheD    15 年前
    >>> import datetime
    >>> today = datetime.date.today()
    >>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
    datetime.date(2009, 10, 26)
    

    一些解释:

    今天约会。减去本周已经过去的天数(这会得到“最后”星期一)。再加一周。

    编辑 :上面是“下星期一”的,但是既然你在找“上星期一”,你可以用

    today - datetime.timedelta(days=today.weekday())
    
        2
  •  36
  •   Steven Graham    15 年前

    克里斯托弗的帖子很接近你想要的。我没有足够的代表发表评论:(

    而不是(这实际上给了你下周一):

    >>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
    datetime.date(2009, 10, 26)
    

    我会说:

    >>> last_monday = today - datetime.timedelta(days=today.weekday())
    

    如果您想要上一周,请添加'weeks=1'参数。

    这使得代码更可读,因为您要减去一个timedelta。这可以消除由于添加具有负偏移和正偏移的timedelta而引起的任何混淆。

        3
  •  20
  •   Paul    9 年前

    我想最简单的方法就是 python-dateutil 这样地:

    from datetime import date
    from dateutil.relativedelta import relativedelta, MO
    
    today = date.today()
    last_monday = today + relativedelta(weekday=MO(-1))
    print last_monday
    
        4
  •  8
  •   unutbu    11 年前

    注意:手术室在评论中说, 我在寻找过去的星期一 “。我认为这意味着我们正在寻找严格发生在今天之前的最后一个星期一。

    仅使用 datetime 模块(特别是考虑到以上对“过去星期一”的解释,如果您希望避免笨拙 if-statements )例如,如果 today 星期一是这样的 2013-12-23 ,

    today - DT.timedelta(days=today.weekday())
    

    收益率 2013-1223 ,与 今天 (不是上周一)。

    使用 dateutil module 你不必做复杂的心理计算,也不必强迫读者做同样的事情来得到正确的日期。 dateutil 都是为了你:

    import dateutil.relativedelta as rdelta
    import datetime as DT
    
    today = DT.date(2013, 12, 23)  # Monday
    
    past_monday = today + rdelta.relativedelta(days=-1, weekday=rdelta.MO(-1))
    print(past_monday)
    # 2013-12-16
    
    next_monday = today + rdelta.relativedelta(days=1, weekday=rdelta.MO(+1))
    print(next_monday)
    # 2013-12-30
    

    注意 days=-1 必须保证 past_monday 是不同的一天 今天 .

        5
  •  1
  •   AKA    8 年前

    你可以使用 纳蒂 . 我试过 分析日期时间 数据分析器 . 比较这三个,我想 纳蒂 是最好的。

    要获得结果,请使用以下方法:

    >>> from natty import DateParser
    >>> dp = DateParser('last monday')
    >>> dp.result()
    [datetime.datetime(2016, 8, 1, 17, 35, 5, tzinfo=tzlocal())] #Today is 9th of August 2016 5.35 PM
    

    Github链接: https://github.com/eadmundo/python-natty

    试试看,它可以做更多!

        6
  •  1
  •   coredumperror    7 年前

    对于将来出现在这个页面上寻找获得“最近的星期日”而不是“最近的星期一”的方式的google用户,您需要做一些额外的计算,因为datetime.week day()将星期一视为一周的第一天:

    today = datetime.date.today()
    weekday = today.weekday() + 1
    start_day = today - datetime.timedelta(days=weekday % 7)
    

    如果今天是星期二 start_day 最后一个星期天。如果今天是星期天,就这样 开始日 今天 . 拿走 % 7 如果你想“上周日”是一周前的话,如果现在是周日的话。

        7
  •  0
  •   elzapp    15 年前

    使用TimeDeltas和DateTime模块:

    import datetime
    datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())
    
        8
  •  0
  •   foosion    15 年前
    d = datetime.datetime.today().weekday()
    

    给你一周中的今天,从0(星期一)到6(星期日)

    datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)
    

    (7-d)%7为您提供星期一之前的天数,如果今天是星期一,则离开您所在的位置