Как получить объект даты Python за последнюю среду
Используя Python, я хотел бы найти объект даты в прошлую среду. Я могу выяснить, где сегодня находится календарь, используя isocalendar, и определить, нужно ли нам вернуться на неделю, чтобы добраться до предыдущей среды. Однако я не могу понять, как создать новый объект даты с этой информацией. По сути, мне нужно выяснить, как создать дату из календаря iso.
from datetime import date
today = date.today()
if today.isocalendar()[2] > 3: #day of week starting with Monday
#get date for Wednesday of last week
else:
#get date for Wednesday of this current week
Ответы
Ответ 1
Думаю, ты хочешь этого. Если указанный день - среда, он даст вам тот день.
from datetime import date
from datetime import timedelta
today = date.today()
offset = (today.weekday() - 2) % 7
last_wednesday = today - timedelta(days=offset)
Пример: последняя среда для каждого дня марта:
for x in xrange(1, 32):
today = date(year=2010, month=3, day=x)
offset = (today.weekday() - 2) % 7
last_wednesday = today - timedelta(days=offset)
print last_wednesday
Ответ 2
Предполагая, что "в прошлую среду" не может быть таким же, как "сегодня", это показывает, как это сделать в любой день недели:
>>> from datetime import date
>>> from datetime import timedelta
>>>
>>> MON, TUE, WED, THU, FRI, SAT, SUN = range(7)
>>>
>>> def lastWday(adate, w):
... """Mon:w=0, Sun:w=6"""
... delta = (adate.weekday() + 6 - w) % 7 + 1
... return adate - timedelta(days=delta)
...
>>> for x in range(8, 16):
... start = date(year=2010, month=3, day=x)
... prev = lastWday(start, WED)
... print start, start.weekday(), prev, prev.weekday()
...
2010-03-08 0 2010-03-03 2
2010-03-09 1 2010-03-03 2
2010-03-10 2 2010-03-03 2
2010-03-11 3 2010-03-10 2
2010-03-12 4 2010-03-10 2
2010-03-13 5 2010-03-10 2
2010-03-14 6 2010-03-10 2
2010-03-15 0 2010-03-10 2
Ответ 3
читать http://docs.python.org/library/datetime.html
Напишите свою собственную функцию, используя date2 = date1 - timedelta (days = 1) и date.isoweekday(), повторяя предыдущие дни, в то время как isoweek не равно 3 (среда)
Ответ 4
Я не уверен, соответствует ли это вашим требованиям, но он должен заставить вас <забастовку > в среду ближе к определенной дате в среду на той же неделе, что и указанная дата, предполагая, что недели начнутся в понедельник:
import datetime
def find_closest_wednesday(date):
WEDNESDAY = 3
year, week, day = date.isocalendar()
delta = datetime.timedelta(days=WEDNESDAY-day)
return date + delta
today = datetime.date.today()
print 'Today: ', today
print 'Closest Wendesday: ', find_closest_wednesday(today)