Как рассчитать в следующую пятницу? - PullRequest
20 голосов
/ 10 января 2012

Как мне вычислить дату следующей пятницы?

Ответы [ 5 ]

54 голосов
/ 10 января 2012

Некоторое улучшение ответа @ taymon:

today = datetime.date.today()
friday = today + datetime.timedelta( (4-today.weekday()) % 7 )

4 - это день недели пятницы (на основе 0, считая с понедельника).
( (4-today.weekday()) % 7) - количество дней до следующей пятницы% всегда неотрицательно).

После просмотра ответа @ ubuntu я должен добавить две вещи:
1. Я не уверен, что пятница = 4 универсально верна.Некоторые люди начинают свою неделю в воскресенье.
2. В пятницу этот код возвращается в тот же день.Чтобы получить следующее, используйте (3-today.weekday())%7+1.Просто старое преобразование x%n в ((x-1)%n)+1.

28 голосов
/ 10 января 2012

Для начала вам понадобится библиотека datetime:

import datetime

Тогда вам нужна дата начала; то есть сегодня.

d = datetime.date.today()

Начиная с этого момента, вы будете продолжать идти вперед до пятницы. Метод date.weekday представляет с понедельника по воскресенье от 0 до 6, поэтому:

while d.weekday() != 4:

Если текущий день не пятница, вам нужно будет добавить день по одному. Чтобы добавить интервал времени к объекту date, вы используете объект timedelta.

    d += datetime.timedelta(1)

Соберите все вместе, и d в конечном итоге будет содержать date объект, представляющий следующую пятницу. Обратите внимание, что если сегодня пятница, этот код будет выдан сегодня; вы можете настроить его, если хотите, чтобы он работал в следующую пятницу.

19 голосов
/ 10 января 2012

Вот как это можно сделать, используя dateutil :

import datetime as DT
import dateutil.relativedelta as REL
today = DT.date.today()
print(today)
# 2012-01-10

rd = REL.relativedelta(days=1, weekday=REL.FR)
next_friday = today + rd
print(next_friday)
# 2012-01-13

(Аргумент days = 1 гарантирует, что «следующая пятница» не совпадает с today вcase today бывает пятница.)

0 голосов
/ 25 апреля 2019

Я нашел этот маятник довольно полезным.Всего одна строка

>>> pendulum.now().next(pendulum.FRIDAY).strftime('%Y-%m-%d')
'2019-04-26'
0 голосов
/ 17 января 2019

Просто для удобства чтения я бы использовал strftime ('% A'), а не weekday ():

import datetime

d = datetime.date.today()

while d.strftime('%a') != 'Fri':
    d += datetime.timedelta(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...