Как получить все даты для данного года и календарной недели в Python? - PullRequest
0 голосов
/ 01 мая 2019

Допустим, у вас есть год "2017" и неделя изокалендера "13".Как бы вы могли эффективно получить все даты, соответствующие этому году и календарной неделе (с использованием такой библиотеки, как datetime или calendar), как список в Python?

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Не уверен, что это то, что вы хотите.Я играл с модулем calendar, и это лучшее, что мне удалось сделать, дайте мне знать:

import calendar

def get_week(y, w):
    weeks  = [
        tuple(w) 
        for t in cal.yeardatescalendar(y) for month in t for w in month
        if w[0].year == y
    ]
    weeks = sorted(list(set(weeks)))
    return list(weeks[w-1])
get_week(2017, 13)

Вывод:

[datetime.date(2017, 3, 27),
 datetime.date(2017, 3, 28),
 datetime.date(2017, 3, 29),
 datetime.date(2017, 3, 30),
 datetime.date(2017, 3, 31),
 datetime.date(2017, 4, 1),
 datetime.date(2017, 4, 2)]

Или с функцией datetime.isocalendar():

import datetime as dt

def get_week(y, w):
    first = next(
        (dt.date(y, 1, 1) + dt.timedelta(days=i) 
         for i in range(367)
         if (dt.date(y, 1, 1) + dt.timedelta(days=i)).isocalendar()[1] == w))
    return [first + dt.timedelta(days=i) for i in range(7)]

get_week(2017, 13)
0 голосов
/ 01 мая 2019

Это должно сделать это.

import datetime
def get_month (year: int, weekday: int):
    start = datetime.datetime (year=year, month=1, day=1)
    '''
    Weekday correction:
    source: https://www.calendar-week.org/
    "In Europe, the first calendar week of the year is the week that
    contains four days of the new year."
    '''
    if start.weekday () >= 4:
        start += datetime.timedelta (days=7-start.weekday ())
    else:
        start -= datetime.timedelta (days=start.weekday ())
    start += datetime.timedelta (days=7*(weekday-1))
    return [start + datetime.timedelta(days=i) for i in range (0, 7)]

Вернет список datetime -s.Чтобы получить строковое представление:

print (list (map (lambda x: str (x.date()), get_month (2017, 2))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...