Operaciones con timedelta.

Chema Cortes pych3m4 en gmail.com
Jue Oct 23 13:28:09 CEST 2008


El 2008/10/23 Pepe Aracil <pepe en diselpro.com> escribió:

> En un programa hago operaciones aritméticas con fechas y utilizo
> operaciones con segundos y operaciones con timedelta.
>
> Ante el cambio horario que se avecina, he observado lo siguiente:
>
>>>> now = time.time()
>>>> print datetime.datetime.fromtimestamp(now)
> 2008-10-23 11:05:06.958547
>>>> print datetime.datetime.fromtimestamp(now + 4320*60) #Sumo 4320 minutos
>>>> (3 dias)
> 2008-10-26 10:05:06.958547
>>>> print
>>>> datetime.datetime.fromtimestamp(now)+datetime.timedelta(seconds=4320*60)
>>>> #Sumo 3 dias
> 2008-10-26 11:05:06.958547
>>>>
>
> Como podeis observar si la suma la hago directa en segundos el resultado es
> 10:05
> y si la hago con timedelta el resultado es 11:05
>
> Alguna idea del porque de esta disparidad?

Por lo que has podido ver, no es lo mismo calcular en segundos que
empleando el timedelta. Según la documentación, el timedelta sólo
almacena internamente tres elementos: días, segundos y microsegundos,
y, según parece, cuando pasas de 86400 segundos se acumulan en las
horas:

>> datetime.timedelta(seconds=24*60*60-1)
datetime.timedelta(0, 86399)

>> datetime.timedelta(seconds=24*60*60-1)+datetime.timedelta(seconds=1)
datetime.timedelta(1)


Piensa que este sábado-domingo tendremos horas con los mismos "times":

>> datetime.datetime.fromtimestamp(1224979200.0)
datetime.datetime(2008, 10, 26, 2, 0)

>> datetime.datetime.fromtimestamp(1224982800.0)
datetime.datetime(2008, 10, 26, 2, 0)


Como bien dice la documentación, las razones para el cambio de hora
son más "políticas" que "racionales", por lo que no se puede
establecer un estándar que se ajuste a cada caso.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es