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

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

Ответы

Ответ 1

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

import datetime

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

d = datetime.date.today()

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

while d.weekday() != 4:

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

    d += datetime.timedelta(1)

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

Ответ 2

Некоторое улучшение в ответе @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.

Ответ 3

Вот как вы могли это сделать, используя 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, если today окажется пятницей.)

Ответ 4

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

import datetime

d = datetime.date.today()

while d.strftime('%a') != 'Fri':
    d += datetime.timedelta(1)