【问题标题】:Previous weekday in PythonPython 中的上一个工作日
【发布时间】:2012-08-16 17:25:36
【问题描述】:

在 Python 中,给定一个日期,我如何找到前一个工作日? (平日是周一到周五。我不在乎假期)

【问题讨论】:

    标签: python date weekday


    【解决方案1】:

    参见datetime 模块,尤其是date()weekday() 函数。例如:

    import datetime
    
    temp = datetime.date(2012,8,21) # Today's date: 2012/08/21
    print temp.weekday()
    

    这将输出10 代表星期一,1 代表星期二,以此类推,直到 6 代表星期日。从这里很容易找到前一个工作日。

    【讨论】:

      【解决方案2】:

      只需从给定日期中减去一天,然后检查该日期是否为工作日。如果没有,则减去另一个,直到你有一个工作日:

      from datetime import date, timedelta
      def prev_weekday(adate):
          adate -= timedelta(days=1)
          while adate.weekday() > 4: # Mon-Fri are 0-4
              adate -= timedelta(days=1)
          return adate
      

      演示:

      >>> prev_weekday(date.today())
      datetime.date(2012, 8, 20)
      >>> prev_weekday(date(2012, 8, 20))
      datetime.date(2012, 8, 17)
      

      或者,使用偏移表;不需要把它变成一个映射,一个元组就可以了:

      _offsets = (3, 1, 1, 1, 1, 1, 2)
      def prev_weekday(adate):
          return adate - timedelta(days=_offsets[adate.weekday()])
      

      【讨论】:

      • 或只是return adate - timedelta(days=[3, 1, 1, 1, 1, 1, 2][adate.weekday()])
      • @BrunoVermeulen:是的,这就是上一个示例中的代码所做的。
      【解决方案3】:

      在日期时间模块中,您可以执行以下操作:a = date.today() - timedelta(days=1) 然后a.weekday()。其中星期一是 0,星期日是 6。

      【讨论】:

        【解决方案4】:

        这是一个老问题,但无论如何,这是一种更简单的方法,不需要循环

        from datetime import datetime, timedelta
        today = datetime.today() # Today date
        weekday = 6
        days = today.isoweekday() - weekday
        if days<0:
            days += 7
        previous_date = today - timedelta(days=days)
        print(previous_date)
        

        【讨论】:

          猜你喜欢
          • 2011-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-23
          • 1970-01-01
          • 1970-01-01
          • 2014-06-07
          • 2019-03-15
          相关资源
          最近更新 更多