2012-01-10 2 views
14

Мне нужно знать, как я могу рассчитать дату следующей пятницы? Я новичок в Python :)Как рассчитать следующую пятницу в Python?

Спасибо!

+1

Это домашнее задание? –

+0

Нет :) просто хочу знать, как это сделать. Я знаю, что есть что-то вроде dateutil, которые могли бы это сделать, но не уверены, стоит ли это использовать или нет. – KennyPowers

+8

Почему люди всегда спрашивают, является ли это домашней работой? Он становится повторяющимся; какая разница? – HexTree

ответ

19

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

import datetime 

Затем вам нужна отправная дата; то есть сегодня.

d = datetime.date.today() 

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

while d.weekday() != 4: 

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

d += datetime.timedelta(1) 

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

+0

Спасибо! Очень полезно – KennyPowers

+0

@rolikoff FYI, когда вы получите ответ, который поможет вам, вы можете принять его, нажав галочку (см. [Faq # howtoask]). – Taymon

+0

Проголосовало, потому что ответ @ ugoren (с изменением, предложенным в комментариях) строго лучше –

41

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

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

Пятница всегда 4 при использовании ['weekday()'] (http://docs.python.org/library/datetime.html#datetime .date.weekday) способ. Метод ['isoweekday()') (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) дает пятницу как 5, потому что он рассматривает с понедельника по воскресенье с 1 по 7. – Taymon

+5

You может использовать 'calendar.FRIDAY' вместо' 4', если вы не возражаете добавить «календарь импорта». – lumbric

15

Вот как вы могли бы сделать это с помощью dateutil: (. days = 1 аргумент гарантирует, что «в следующую пятницу» не то же самое, как today в случае today случается, пятница)

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 

Смежные вопросы