Рабочие дни в Python

Мне нужно вычесть рабочие дни с текущей даты.

В настоящее время у меня есть код, который нужно всегда запускать в последний рабочий день. Так может быть и сегодня, если мы с понедельника по пятницу, но если это суббота или воскресенье, мне нужно вернуть его в пятницу до уик-энда. У меня в настоящее время есть довольно неуклюжий код для этого:

lastBusDay = datetime.datetime.today() if datetime.date.weekday(lastBusDay) == 5: #if it's Saturday lastBusDay = lastBusDay - datetime.timedelta(days = 1) #then make it Friday elif datetime.date.weekday(lastBusDay) == 6: #if it's Sunday lastBusDay = lastBusDay - datetime.timedelta(days = 2); #then make it Friday 

Есть ли способ лучше?

Могу ли я сказать timedelta работать в будние дни, а не календарные дни, например?

  • как получить кадры из видео параллельно с использованием cv2 и многопроцессорности в python
  • Вложение приложения bokeh в колбу
  • не удалось загрузить простой csv в networkx в Python
  • Ошибка при вызове scikit-learn с использованием сборки AMD64 для Scipy в Windows
  • Вызовите вложенную функцию в Python
  • JavaScript-эквивалент функции format () Python?
  • Django / xhtml2pdf - объект не имеет атрибута 'encode'
  • Установить подпись функции в Python
  • 7 Solutions collect form web for “Рабочие дни в Python”

    Используйте панды!

     import pandas as pd # BDay is business day, not birthday... from pandas.tseries.offsets import BDay # pd.datetime is an alias for datetime.datetime today = pd.datetime.today() print today - BDay(4) 

    С сегодняшнего дня, четверг, 26 сентября, вы получите:

     datetime.datetime(2013, 9, 20, 14, 8, 4, 89761) 

    Кажется, есть несколько вариантов, если вы открыты для установки дополнительных библиотек.

    В этом сообщении описывается способ определения рабочих дней с датой .

    http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/3758.html

    BusinessHours позволяет вам настраивать свой список праздников и т. Д., Чтобы определить, когда ваше рабочее время (и по продолжительности рабочих дней).

    http://pypi.python.org/pypi/BusinessHours/

    ОТКАЗ: Я автор …

    Я написал пакет, который делает именно это, расчеты деловых дат. Вы можете использовать пользовательские спецификации недели и праздники.

    У меня была эта точная проблема при работе с финансовыми данными и я не нашел ни одного из доступных решений, особенно легко, поэтому я написал один.

    Надеюсь, это полезно для других людей.

    https://pypi.python.org/pypi/business_calendar/

    Возможно, этот код может помочь:

     lastBusDay = datetime.datetime.today() shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3)) lastBusDay = lastBusDay - shift 

    Идея состоит в том, что по понедельникам вы должны вернуться 3 дня, по воскресеньям 2 и 1 в любой другой день.

    Заявление (lastBusDay.weekday() + 6) % 7 просто восстанавливает понедельник с 0 до 6.

    На самом деле не знаю, будет ли это лучше с точки зрения производительности.

    Это даст генератор рабочих дней, конечно, без праздников, остановка – это объект datetime.datetime. Если вам нужны праздники, просто добавьте дополнительный аргумент со списком праздников и проверьте с «IFology» 😉

     def workingdays(stop, start=datetime.date.today()): while start != stop: if start.weekday() < 5: yield start start += datetime.timedelta(1) 

    Позже вы можете считать их

     workdays = workingdays(datetime.datetime(2015, 8, 8)) len(list(workdays)) 

    Почему бы вам не попробовать что-то вроде:

     lastBusDay = datetime.datetime.today() if datetime.date.weekday(lastBusDay) not in range(0,5): lastBusDay = 5 
      def getNthBusinessDay(startDate, businessDaysInBetween): currentDate = startDate daysToAdd = businessDaysInBetween while daysToAdd > 0: currentDate += relativedelta(days=1) day = currentDate.weekday() if day < 5: daysToAdd -= 1 return currentDate 
    Python - лучший язык программирования в мире.