2011-03-02 15 views
7

Moduł datetime dostarcza metodę date.isocalendar, która, biorąc pod uwagę datę, zwraca ją w formacie ([year], [week], [weekday]). Jak mogę cofnąć? Biorąc pod uwagę krotkę ([year], [week], [weekday]), jak mogę uzyskać obiekt date?Python: Przeciwieństwo `datetime.date.isocalendar()`

+0

Hot d * MN, jest to bardziej skomplikowane niż myślałem na początku. Tydzień 1 tydzień, który zawiera pierwszy rok kalendarzowy * Czwartek *!?! –

+3

Haha Witamy w świecie kalendarzy, ciesz się pobytem :) –

+1

Mam dokuczliwe podejrzenie, że istnieje bardzo dobry powód, dla którego ta funkcja nie jest dostępna w Bibliotece Standardowej :) –

Odpowiedz

4

EDIT Znaleziony pytanie roztworem: What's the best way to find the inverse of datetime.isocalendar()?

Moje rozwiązanie miał błędy. W googlowaniu zobaczyłem poprzednie pytanie, które po testach działało poniżej. (Zobacz odpowiedź na to pytanie w powyższym linku do definicji iso_to_gregorian). (Zasadniczo znaleźć iso datę rozpoczęcia roku, a następnie użyć timedelta znaleźć aktualną datę z dziennym i tygodniowym numer.

for i in range(-10000,10000,1): 
    x = datetime.datetime.today().date() + datetime.timedelta(i) 
    x_iso = datetime.datetime.isocalendar(x) 
    assert iso_to_gregorian(*x_iso) == x 
+3

Spróbuj tego na "1999,1,1". Ty będziesz tydzień wolny ... –

+1

Yup jak tylko to przetestowałem, zdałem sobie sprawę, że mam błędy. Dyskusja nad pytaniem o stackoverflow z 2008 r. Zawiera powody, dla których przypadki brzegowe nie działały i ma stosunkowo proste rozwiązanie. –

+0

+1 za znalezienie właściwej odpowiedzi :) –