6

Как рассчитать дату, через шесть месяцев от текущей даты, с помощью модуля datetime в Python?

8

Я использую модуль datetime в Python и пытаюсь рассчитать дату, которая будет через 6 месяцев от текущей даты. Не могли бы вы помочь мне с этой задачей?

Мне необходимо получить дату через 6 месяцев, чтобы установить дату обзора. Если пользователь вводит данные в систему, то у этих данных должна быть дата обзора, равная 6 месяцам от даты их ввода.

5 ответ(ов)

0

Ответ на ваш вопрос зависит от того, что вы подразумеваете под "6 месяцев от текущей даты".

  1. Если вы хотите использовать натуральные месяцы:

    inc = 6
    year = year + (month + inc - 1) // 12
    month = (month + inc - 1) % 12 + 1
    
  2. Если вы предпочитаете банковское определение, т.е. 6 * 30:

    date += datetime.timedelta(6 * 30)
    

Выбор подхода зависит от ваших нужд и контекста задачи.

0

В Python 3.x вы можете сделать это следующим образом:

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

Однако вам потребуется установить модуль python-dateutil:

pip install python-dateutil

Не забудьте импортировать нужные модули перед использованием!

0

Вот пример использования dateutil.relativedelta, который я нашел полезным для итерации по прошлому году, пропуская каждый раз месяц до текущей даты:

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

Как и в других ответах, вам нужно понять, что именно вы имеете в виду под "6 месяцев с ahora". Если вы имеете в виду "день месяца в месяце, который будут шесть лет впереди", то вот как это можно сделать:

datetime.datetime.now() + relativedelta(months=6)
0

Python может использовать пакет dateutil для этих целей. Обратите внимание на приведенный ниже пример.

Функциональность не ограничивается только этими операциями: вы также можете одновременно использовать комбинацию дней, месяцев и лет.

import datetime
from dateutil.relativedelta import relativedelta

# вычитаем месяцы
proc_dt = datetime.date(2021, 8, 31)
proc_dt_minus_3_months = proc_dt + relativedelta(months=-3)
print(proc_dt_minus_3_months)

# добавляем месяцы
proc_dt = datetime.date(2021, 8, 31)
proc_dt_plus_3_months = proc_dt + relativedelta(months=+3)
print(proc_dt_plus_3_months)

# вычитаем дни:
proc_dt = datetime.date(2021, 8, 31)
proc_dt_minus_3_days = proc_dt + relativedelta(days=-3)
print(proc_dt_minus_3_days)

# добавляем дни:
proc_dt = datetime.date(2021, 8, 31)
proc_dt_plus_3_days = proc_dt + relativedelta(days=+3)
print(proc_dt_plus_3_days)

# вычитаем годы:
proc_dt = datetime.date(2021, 8, 31)
proc_dt_minus_3_years = proc_dt + relativedelta(years=-3)
print(proc_dt_minus_3_years)

# добавляем годы:
proc_dt = datetime.date(2021, 8, 31)
proc_dt_plus_3_years = proc_dt + relativedelta(years=+3)
print(proc_dt_plus_3_years)

Результаты:

2021-05-31
2021-11-30
2021-08-28
2021-09-03
2018-08-31
2024-08-31
0

Этот ответ не решает конкретный вопрос (используя только datetime), но, учитывая, что другие предлагали использовать различные модули, вот решение с использованием pandas.

import datetime as dt
import pandas as pd

date = dt.date.today() - \
       pd.offsets.DateOffset(months=6)

print(date)

Это работает как ожидается в високосные годы:

date = dt.datetime(2019, 8, 29) - \
       pd.offsets.DateOffset(months=6)
print(date)

Вывод будет следующим:

2019-02-28 00:00:00
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь