Ver Mensaje Individual
  #9 (permalink)  
Antiguo 23/11/2011, 19:07
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Suma de meses a una fecha en python

No he probado rigurosamente mi programa como para decir que funciona al 100% pero aqui te dejo una implementación hecha por mi para sumarle meses a una fecha.

Descripción:
Dado una fecha valida (en este caso un objeto datetime) añadir meses a la fecha de la siguiente manera:
  1. Calcula el nuevo año, después de todo si pasan mas de 12 meses es un año completo.
  2. Calcula cuantos meses se va a desplazar, esto siempre cae un rango de 0 a 11. Después de todo si nos movemos 12 meses llegamos al mismo mes, lo mismo pasa con 24, 48 y todos los múltiplos de 12.
  3. Se desplaza esa cantidad de meses y hace una corrección tanto en los meses como en los años.
  4. El día es el mismo.
  5. Si resulta ser una fecha no valida entonces el día se pasa al ultimo día valido del mes.

Código Python:
Ver original
  1. from datetime import datetime
  2.  
  3. def add_month(mDate, months):
  4.     nYear = mDate.year + months / 12
  5.     dMonth = months % 12
  6.     if dMonth + mDate.month > 12:
  7.         nYear += 1
  8.     nMonth = (mDate.month + dMonth) % 12 or 12
  9.     nDay = mDate.day
  10.  
  11.     try:
  12.         return datetime(nYear, nMonth, nDay)
  13.     except Exception, e:
  14.         pass
  15.     if nMonth == 2:
  16.         nDay = 28
  17.         if (nYear % 4 == 0 and  nYear % 100 != 0) or nYear % 400 == 0:
  18.             nDay = 29
  19.     else:
  20.         nDay = 30
  21.     return datetime(nYear, nMonth, nDay)
  22.  
  23. d = datetime(2000, 1, 31)
  24. for i in range(24):
  25.     print add_month(d, i)
NOTA: Solo funciona con fechas validas y meses positivos o cero.

Última edición por razpeitia; 24/11/2011 a las 23:30 Razón: Corrigiendo código.