Re: Aritmética de fechas
Pablo Rey Sobral
pabloreysobral en gmail.com
Mar Ene 4 03:27:25 CET 2005
Hola,
> Hola,
>
> El otro día había leído comentarios sobre aritmética de fechas y que no
> tenía mucho sentido. Depende para qué. Siempre que esté bien definida sí
> tiene sentido. Sólo por curiosidad, y para que los programadores de
> Python lo entiendan, en Visual Basic sí existe una función de aritmética
> de fechas que se llama DateAdd:
>
> VB:
> ?DateAdd("m",1,CDate("31/01/2005"))
> 28/02/2005
>
> que no es lo mismo que:
> ?DateAdd("d",30,CDate("31/01/2005"))
> 02/03/2005
A ver si esto te soluciona la curiosidad:
from datetime import datetime, timedelta
def DiasMes(f):
if f.month in (1,3,5,7,8,10,12):
return 31
elif f.month in (4,6,9,11):
return 30
else: # febrero
if (f.year % 4) == 0 and not((f.year % 400) in (100,200,300)):
return 29
else:
return 28
def SumaMeses(delta, ini):
res = ini.replace(day=1)
for x in range (0,delta):
res += timedelta(DiasMes(res))
if ini.day > DiasMes(res):
return res.replace(day = DiasMes(res))
else:
return res.replace(day = ini.day)
x = datetime(2000,1,31)
print SumaMeses(1,x)
> (siendo el intervalo "m" = mes y "h" = hora).
>
> Es decir, al sumar un mes, en este caso no pasa al mes siguiente si este
> no tiene los días necesarios. Supongo que no será muy difícil
> implementar eso en Python. (tampoco hay tantos periodos: segundo,
> minuto, hora, día, mes, año)
>
> Erny
El resto de sumas puedes hacerlos con timedelta directamente:
datetime(2005,1,31) + timedelta (days = 30)
datetime(2005,1,31) + timedelta (seconds = 55)
....
Un saludo.
Más información sobre la lista de distribución Python-es