【问题标题】:Finding the date of the next Saturday查找下周六的日期
【发布时间】:2013-05-27 09:14:18
【问题描述】:

如何在 Python 中查找下周六的日期?最好使用datetime,格式为'2013-05-25'?

【问题讨论】:

标签: python datetime python-2.7


【解决方案1】:
>>> from datetime import datetime, timedelta
>>> d = datetime.strptime('2013-05-27', '%Y-%m-%d') # Monday
>>> t = timedelta((12 - d.weekday()) % 7)
>>> d + t
datetime.datetime(2013, 6, 1, 0, 0)
>>> (d + t).strftime('%Y-%m-%d')
'2013-06-01'

我使用(12 - d.weekday()) % 7 计算给定日期和下周六之间的天数增量,因为weekday 介于 0(星期一)和 6(星期日)之间,所以星期六是 5。但是:

  • 5 和 12 模 7 相同(是的,我们一周有 7 天 :-))
  • 所以12 - d.weekday() 介于 6 和 12 之间,而 5 - d.weekday() 将介于 5 和 -1 之间
  • 所以这让我不用处理否定的情况(-1 代表星期日)。

这是一个非常简单的版本(不检查),适用于任何工作日:

>>> def get_next_weekday(startdate, weekday):
    """
    @startdate: given date, in format '2013-05-25'
    @weekday: week day as a integer, between 0 (Monday) to 6 (Sunday)
    """
    d = datetime.strptime(startdate, '%Y-%m-%d')
    t = timedelta((7 + weekday - d.weekday()) % 7)
    return (d + t).strftime('%Y-%m-%d')

>>> get_next_weekday('2013-05-27', 5) # 5 = Saturday
'2013-06-01'

【讨论】:

【解决方案2】:

我发现这个pendulum 非常有用。就一行

In [4]: pendulum.now().next(pendulum.SATURDAY).strftime('%Y-%m-%d')
Out[4]: '2019-04-27'

详情见下文:

In [1]: import pendulum

In [2]: pendulum.now()
Out[2]: DateTime(2019, 4, 24, 17, 28, 13, 776007, tzinfo=Timezone('America/Los_Angeles'))

In [3]: pendulum.now().next(pendulum.SATURDAY)
Out[3]: DateTime(2019, 4, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

In [4]: pendulum.now().next(pendulum.SATURDAY).strftime('%Y-%m-%d')
Out[4]: '2019-04-27'

【讨论】:

    【解决方案3】:

    你需要两个主要的包,

    import datetime
    import calendar
    

    一旦有了这些,您就可以通过以下代码简单地获得所需的一周日期,

    today = datetime.date.today() #reference point. 
    saturday = today + datetime.timedelta((calendar.SATURDAY-today.weekday()) % 7 )
    saturday
    
    

    奖金 在内容之后,如果您键入

    saturday.weekday()
    

    结果为@​​987654324@。 因此,您也可以使用5 代替calendar.SATURDAY,您将得到相同的结果。

    saturday = today + datetime.timedelta((5-today.weekday()) % 7 )

    【讨论】:

      【解决方案4】:

      如果你只想要今天的日期(灵感来自 Emanuelle)

      def get_next_weekday(weekday_number):
          """
          @weekday: week day as a integer, between 0 (Monday) to 6 (Sunday)
          """
          assert 0 <= weekday_number <= 6
          today_date = datetime.today()
          next_week_day = timedelta((7 + weekday_number - today_date.weekday()) % 7)
          return (today_date + next_week_day).strftime('%d/%m/%Y')
      

      【讨论】:

        【解决方案5】:

        同样,基于 Emmanuel 的示例,但让 0-6 符合您的一周:

        ScheduleShift = -1 # make Saturday end of week
        EndofWeekDay = lambda do : do + datetime.timedelta( ( ScheduleShift + (13 -  do.weekday() ) %7 ) )
        

        可以通过以下方式调用:

        EndofWeekDay( datetime.date.today() )
        

        返回一个 datetime.date 对象

        【讨论】:

          【解决方案6】:

          只是想分享一个代码。这样,您将获得接下来 10 天内星期六的日期列表。

          from datetime import datetime, timedelta
          target_day = 'Saturday'
          now_ = datetime.today().date()
          how_many_days = 10
          next_date = [now_ + timedelta(days=x) for x in range(how_many_days) if (now_ + timedelta(days=x)).strftime("%A") == target_day]
          print(next_date)
          

          【讨论】:

            猜你喜欢
            • 2023-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多