yyyy from example create python datetime date

from - strftime python



cómo obtener el mismo día del próximo mes de un día determinado en python usando datetime (8)

Sé usar datetime.timedelta puedo obtener la fecha de algunos días de la fecha dada

daysafter = datetime.date.today() + datetime.timedelta(days=5)

pero parece que no hay datetime.timedelta(month=1)


Al ver qué mes es en 32 días, puede averiguar si este es el último día del mes y si la fecha existe el mes próximo. Esto se debe a que al menos uno de los dos meses consecutivos contiene 31 días

from datetime import date, timedelta def in_a_month(d): in_32_days = d + timedelta(32) if (in_32_days.month - d.month) % 12 > 1: return in_32_days - timedelta(in_32_days.day) else: return date(in_32_days.year, in_32_days.month, d.day)

O si necesita una solución para agregar o eliminar una cantidad arbitraria de meses

from datetime import date, timedelta def last_day_in_month(a_date, months_forward = 0): month_index = a_date.year * 12 + a_date.month + months_forward y = month_index // 12 m = (month_index % 12) + 1 return date(y, m, 1) - timedelta(1) def add_month(a_date, months = 1): is_last_day = a_date == last_day_in_month(a_date) last_in_target_month = last_day_in_month(a_date, months) if is_last_day or a_date.day > last_in_target_month.day: return last_in_target_month else: return last_in_target_month.replace(day = a_date.day)


Así es como lo resolví.

from datetime import date try: (year, month) = divmod(date.today().month, 12) next_month = date.today().replace(year=date.today().year+year, month=month+1) except ValueError: # This day does not exist in next month

Puede omitir el try / catch si solo desea el primer día del mes próximo configurando replace(year=date.today().year+year, month=month, day=1) . Esta siempre será una fecha válida ya que hemos atrapado el desbordamiento del mes usando divmod .


Este trabajo para mí

import datetime import calendar def next_month_date(d): _year = d.year+(d.month//12) _month = 1 if (d.month//12) else d.month + 1 next_month_len = calendar.monthrange(_year,_month)[1] next_month = d if d.day > next_month_len: next_month = next_month.replace(day=next_month_len) next_month = next_month.replace(year=_year, month=_month) return next_month

uso:

d = datetime.datetime.today() print next_month_date(d)


Por supuesto que no; si el día de hoy es el 31 de enero, ¿cuál sería "el mismo día del próximo mes"? Obviamente no hay una solución correcta , ya que el 31 de febrero no existe, y el módulo de datetime y datetime no funciona para "adivinar qué es lo que plantea el usuario al plantear este problema imposible sin una solución correcta (erróneamente)" ;-).

Yo sugiero:

try: nextmonthdate = x.replace(month=x.month+1) except ValueError: if x.month == 12: nextmonthdate = x.replace(year=x.year+1, month=1) else: # next month is too short to have "same date" # pick your own heuristic, or re-raise the exception: raise


Use el módulo dateutil . Tiene deltas de tiempo relativos :

import datetime from dateutil import relativedelta nextmonth = datetime.date.today() + relativedelta.relativedelta(months=1)

Hermosa.


from calendar import mdays from datetime import datetime, timedelta today = datetime.now() next_month_of_today = today + timedelta(mdays[today.month])

No quiero importar dateutil. Prueba esto. Buena suerte.


from datetime import timedelta try: next_month = (x.replace(day=28) + timedelta(days=7)).replace(day=x.day) except ValueError: # assuming January 31 should return last day of February. next_month = (x + timedelta(days=31)).replace(day=1) - timedelta(days=1)


import calendar, datetime def next_month ( date ): """return a date one month in advance of ''date''. If the next month has fewer days then the current date''s month, this will return an early date in the following month.""" return date + datetime.timedelta(days=calendar.monthrange(date.year,date.month)[1])