Django, metodologías agiles y calidad del software

Muchos programadores, entre los que estaba yo mismo, piensan que codificar es todo su trabajo, como mucho documentar someramente el código por el que dirán. La gestión de proyectos, para estos programadores, también suele reducirse a: nos sentamos cinco minutos a pensar que queremos que haga nuestro software y después a teclear, cientos, miles, decenas de miles de lineas de código ¡Que bonito es mi código y que bien funciona! Es la única conclusión posible, puesto que hace exactamente lo que el programador ha pensado que tiene que hacer. Continúa leyendo Django, metodologías agiles y calidad del software

Anuncios

Manejando fechas con python

O como descubrir que si se hacen bien las cosas evitan muchos dolores de cabeza.

Llevo más de 10 años programando en Java y más de 12 programando en general, si me restrinjo a mi vida laboral pues estamos hablando de siete años en Java y seis meses en Python. No entrare a discutir las virtudes y defectos de cada lenguaje, cada uno tiene lo suyo, pero no puedo evitar comparar el manejo de fechas que ha sido un dolor de cabeza en los diferentes proyectos que hemos realizado con Java y que por el momento esta siendo una delicia con Python.

Una pequeña muestra de lo que se puede hacer con el manejo de fechas con Python, mediante la libreria python-dateutil.

Primero instalamos la libreria python-dateutil.

easy_install python-dateutil

A continuación podemos crear un script con el código de ejemplo o lo ejecutamos en la consola intercativa de Python:

from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.rrule import *
from dateutil.parser import *
from datetime import *

today = date.today()
year = rrule(YEARLY,bymonth=8,bymonthday=16,byweekday=FR)[0].year
rdelta = relativedelta(easter(year), today)
print "Hoy es:", today
print "El próximo año en que el 13 de agosto es viernes es el :", year
print "Faltan %s días para el Día de Pascua." %(rdelta)
print "Pascua de ese año es el %s." %(today+rdelta)

El resultado de ejecutar este código es:

Hoy es: 2009-02-06
El próximo año en que el 13 de agosto es viernes es el : 2010
Faltan relativedelta(years=+1, months=+1, days=+29) días para el Día de Pascua.
Pascua de ese año es el 2010-04-04.

Simple y potente, especialmente las rrule, que nos permiten encontrar todos los días que cumplen un cierto patrón. En este caso, buscamos con frecuencia anual, un día de la semana viernes, que sea día 13 del mes de agosto, el primer día que cumple este patrón es en el año 2010, nos devuelve un iterador con todos los días que cumplen esta regla, de cual nosotros queremos conocer el primer año en cumplirla.Esto, son utilidades aparte de las que ya nos ofrece el propio lenguaje de ‘serie’, como restar fechas, añadir o restar periodos,…, por ejemplo hoy más dos días seria tan sencillo como:

import datetime
pasado_manyana = date.today() + timedelta(days=2)
print pasado_manyana
2009-02-08

Y mucho más.