2011-03-02 15 views
7

El módulo datetime proporciona un método date.isocalendar que, dada una fecha, lo devuelve con el formato ([year], [week], [weekday]). ¿Cómo retrocedo? Dada una tupla ([year], [week], [weekday]), ¿cómo puedo obtener un objeto date?Python: lo contrario de `datetime.date.isocalendar()`

+0

caliente d * mn, esto es más complicado de lo que pensaba en un principio. La semana 1 es la semana que contiene el primer año del calendario * Jueves *!?! –

+3

Haha. Bienvenido al mundo de los calendarios, disfruta de tu estancia :) –

+1

Tengo una persistente sospecha de que hay una muy buena razón por la cual esta función no está en la biblioteca estándar :) –

Respuesta

4

EDITAR pregunta encontrado con solución: What's the best way to find the inverse of datetime.isocalendar()?

Mi solución tenía errores. En google vio la pregunta anterior que en las pruebas a continuación funcionó. (Consulte la pregunta respondida superior en el enlace anterior para la definición de iso_to_gregorian). (Básicamente encontrar iso fecha de inicio del año y luego usar timedelta para encontrar fecha actual desde el primer día y de la semana número.

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

Prueba esto en '1999,1,1'. Estará una semana libre ... –

+1

Sí, tan pronto como lo probé me di cuenta de que tenía errores. La discusión sobre la pregunta de 2008 sobre el stackoverflow pasa por las razones por las que los casos extremos no estaban funcionando y tiene una solución relativamente simple. –

+0

+1 para encontrar la respuesta correcta :) –

Cuestiones relacionadas