Aritmética de fechas

Chema Cortés py en ch3m4.org
Mar Ene 4 11:04:08 CET 2005


El Martes, 4 de Enero de 2005 03:27, Pablo Rey Sobral escribió:
>
> 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

Se podrías emplear el módulo 'calendar' para ésto mismo:

import calendar

def DiasMes(f):
  firstweekday,days=calendar.monthrange(f.year,f.month)
  return days


> 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)


def SumaMeses(delta,ini):
  years,month=divmod(ini.month+delta,12)
  return datetime.date(
             ini.year+years,
             month,
             min(ini.day,DiasMes(month))
         )



> x = datetime(2000,1,31)
> print SumaMeses(1,x)






PD: Sí, ya lo sé. Me pirra refactorizar, ¿qué pasa? :-D
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20050104/f4bc93ff/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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