Как добраться, дата Python возражают в течение прошлой среды

Используя Python я хотел бы найти объект даты в течение прошлой среды. Я могу выяснить, где сегодня находится на календаре с помощью изокалендаря, и определите, должны ли мы возвратиться неделя для получения до предыдущей среды. Однако я не могу выяснить, как создать новый объект даты с той информацией. По существу я должен выяснить, как создать дату из календарного кортежа 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
17
задан roktechie 4 March 2010 в 18:36
поделиться

4 ответа

Думаю, вам это нужно. Если указанный день - среда, он даст вам этот день.

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
43
ответ дан 30 November 2019 в 10:49
поделиться

Я не уверен, соответствует ли это вашим требованиям, но он должен дать вам среду, ближайшую к указанной дате среду той же недели, что и указанная дата, при условии, что недели начинаются в понедельник:

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)
-1
ответ дан 30 November 2019 в 10:49
поделиться

прочтите http://docs.python.org/library/datetime.html

Напишите свою собственную функцию, используя date2 = date1 - timedelta (days = 1) и date.isoweekday (), повторяя предыдущие дни а isoweek не равно 3 (среда)

-1
ответ дан 30 November 2019 в 10:49
поделиться

Если предположить, что «последняя среда» не может быть таким же, как «сегодня», это показывает, как это сделать для любого дня недели:

>>> 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
7
ответ дан 30 November 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: