¿Cómo calculo la fecha a seis meses de la fecha actual usando el módulo datetime de Python?

Resuelto RailsSon asked hace 15 años • 0 respuestas

Estoy usando el módulo Python de fecha y hora. Estoy buscando calcular la fecha a 6 meses de la fecha actual. ¿Alguien podría darme un poco de ayuda para hacer esto?

La razón por la que quiero generar una fecha a 6 meses de la fecha actual es para generar una fecha de revisión . Si el usuario ingresa datos al sistema tendrá una fecha de revisión de 6 meses a partir de la fecha en que ingresó los datos.

RailsSon avatar Feb 13 '09 22:02 RailsSon
Aceptado

Esta solución me pareció buena. (Esto usa la extensión python-dateutil )

from datetime import date
from dateutil.relativedelta import relativedelta

six_months = date.today() + relativedelta(months=+6)

La ventaja de este enfoque es que se ocupa de los problemas con 28, 30, 31 días, etc. Esto resulta muy útil para manejar reglas y escenarios comerciales (por ejemplo, generación de facturas, etc.).

$ date(2010,12,31)+relativedelta(months=+1)
  datetime.date(2011, 1, 31)

$ date(2010,12,31)+relativedelta(months=+2)
  datetime.date(2011, 2, 28)
Mahendra avatar Dec 10 '2010 06:12 Mahendra

Bueno, eso depende de lo que quieras decir con 6 meses a partir de la fecha actual.

  1. Usando meses naturales:

    inc = 6
    year = year + (month + inc - 1) // 12
    month = (month + inc - 1) % 12 + 1
    
  2. Usando la definición bancaria, 6*30:

    date += datetime.timedelta(6 * 30)
    
vartec avatar Feb 13 '2009 15:02 vartec

Con Python 3.x puedes hacerlo así:

from datetime import datetime, timedelta
from dateutil.relativedelta import *

date = datetime.now()
print(date)
# 2018-09-24 13:24:04.007620

date = date + relativedelta(months=+6)
print(date)
# 2019-03-24 13:24:04.007620

pero necesitarás instalar el módulo python-dateutil :

pip install python-dateutil
Luka Lopusina avatar Sep 24 '2018 11:09 Luka Lopusina

Entonces, aquí hay un ejemplo que dateutil.relativedeltaencontré útil para recorrer el año pasado, saltando un mes cada vez hasta la fecha actual:

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> today = datetime.datetime.today()
>>> month_count = 0
>>> while month_count < 12:
...  day = today - relativedelta(months=month_count)
...  print day
...  month_count += 1
... 
2010-07-07 10:51:45.187968
2010-06-07 10:51:45.187968
2010-05-07 10:51:45.187968
2010-04-07 10:51:45.187968
2010-03-07 10:51:45.187968
2010-02-07 10:51:45.187968
2010-01-07 10:51:45.187968
2009-12-07 10:51:45.187968
2009-11-07 10:51:45.187968
2009-10-07 10:51:45.187968
2009-09-07 10:51:45.187968
2009-08-07 10:51:45.187968

Al igual que con las otras respuestas, debes averiguar qué quieres decir realmente con "dentro de 6 meses". Si te refieres a "el día de hoy del mes en el mes dentro de seis años", entonces esto sería suficiente:

datetime.datetime.now() + relativedelta(months=6)
 avatar Jul 07 '2010 17:07