Как рассчитать в следующую пятницу?
Как я могу рассчитать дату следующей пятницы?
Ответы
Ответ 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)