¿Cómo calculo la fecha a seis meses de la fecha actual usando el módulo datetime de Python?
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.
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)
Bueno, eso depende de lo que quieras decir con 6 meses a partir de la fecha actual.
Usando meses naturales:
inc = 6 year = year + (month + inc - 1) // 12 month = (month + inc - 1) % 12 + 1
Usando la definición bancaria, 6*30:
date += datetime.timedelta(6 * 30)
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
Entonces, aquí hay un ejemplo que dateutil.relativedelta
encontré ú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)