5.6.07

Calculando la diferencia en días entre dos fechas con Python

Es probable que esta función exista dentro del módulo time de Python pero, al no haberla encontrado, ha tocado hacerse una más casera.

El funcionamiento es simple, aportando dos fechas en formato estándar (YYYY-mm-dd) con separadores estándar (/ - .) se realiza el cálculo con una simple función, tal como sigue:

#!/usr/bin/python

from datetime import date

def daysDifference(date1,date2):


   d1 = date(int(date1[0:4]),int(date1[5:7]),int(date1[-2:]))

   d2 = date(int(date2[0:4]),int(date2[5:7]),int(date2[-2:]))

   diff = d2 - d1

   return diff.days

if __name__=='__main__':

   numeroDias = daysDifference('20050203','20070423')

4 comentarios:

Anónimo dijo...

Increible!!!
Tu propio ejemplo no funciona:

1.- Las fechas utilizadas en el ejemplo no tienen el separador entre año, mes y día.

2.- Falta un import del módulo "datetime" para que renonozca el tipo "date".

Así vamos...

Jose Ramon Vilas dijo...

Si, tienes razón, no funciona, pero no lo hace por ninguna de las razones que has dicho.

1. Las fechas utilizadas no tienen separadores porque no se utilizan separadores. El método está especificado para tratar strings (si mirases el código lo verías).

2. La primera línea realiza el import, pero en lugar de cargar todo el módulo datetime (que no lo necesita) carga únicamente la clase date, por eso de optimizar y tal...

¿Donde está el error?
d1 = date(int(date1[0:4]),int(date1[5:7]),int(date1[-2:]))
d2 = date(int(date2[0:4]),int(date2[5:7]),int(date2[-2:]))

Donde debería ser:

d1 = date(int(date1[0:4]),int(date1[4:6]),int(date1[-2:]))

d2 = date(int(date2[0:4]),int(date2[4:6]),int(date2[-2:]))

Te has cubierto de gloria amigo!

Anónimo dijo...

como hacer la resta de dos horas:
por ejemplo
1 hra sea de inicio
2 hra sea de termino
ahora como hace para restarlas en python con el modulo datetime

Unknown dijo...

tenes que hacer 2 date, el codigo sería el siguiente:
from datetime import *
a = date(2012,07,20)
b = date (2013,07,20)
print b - a

Saludos!