2011-03-02 8 views
7

Il modulo datetime fornisce un metodo date.isocalendar che, data una data, lo restituisce nel formato ([year], [week], [weekday]). Come faccio a tornare indietro? Data una tupla ([year], [week], [weekday]), come posso ottenere un oggetto date?Python: il contrario di `datetime.date.isocalendar()`

+0

calda d * mn, questo è più complicato di quanto pensassi in un primo momento. Settimana 1 è la settimana che contiene il primo anno di calendario * Giovedì *!?! –

+3

Haha. Benvenuti nel mondo dei calendari, godetevi il vostro soggiorno :) –

+1

Ho il fastidioso sospetto che ci sia una buona ragione per cui questa funzione non è nella libreria standard :) –

risposta

4

EDIT domanda Trovato con la soluzione: What's the best way to find the inverse of datetime.isocalendar()?

mia soluzione ha avuto errori. Su google ha visto la domanda precedente che al test ha funzionato. (Vedere la domanda con risposta dall'alto nel link sopra per la definizione di iso_to_gregorian). (Fondamentalmente trovare iso anno data di inizio e quindi utilizzare timedelta per trovare la data corrente di giorno e numero della settimana.

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

Prova questo in data 1999,1,1. Sarai una settimana libera ... –

+1

Sì, appena l'ho provato mi sono reso conto di avere degli errori. La discussione sulla questione dello stackoverflow 2008 passa attraverso i motivi per cui i casi limite non funzionavano e ha una soluzione relativamente semplice. –

+0

+1 per trovare la risposta giusta :) –

Problemi correlati