Как рассчитать дату, через шесть месяцев от текущей даты, с помощью модуля datetime в Python?
Я использую модуль datetime в Python и пытаюсь рассчитать дату, которая будет через 6 месяцев от текущей даты. Не могли бы вы помочь мне с этой задачей?
Мне необходимо получить дату через 6 месяцев, чтобы установить дату обзора. Если пользователь вводит данные в систему, то у этих данных должна быть дата обзора, равная 6 месяцам от даты их ввода.
5 ответ(ов)
Ответ на ваш вопрос зависит от того, что вы подразумеваете под "6 месяцев от текущей даты".
Если вы хотите использовать натуральные месяцы:
inc = 6 year = year + (month + inc - 1) // 12 month = (month + inc - 1) % 12 + 1
Если вы предпочитаете банковское определение, т.е. 6 * 30:
date += datetime.timedelta(6 * 30)
Выбор подхода зависит от ваших нужд и контекста задачи.
В 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
Не забудьте импортировать нужные модули перед использованием!
Вот пример использования 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)
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
Этот ответ не решает конкретный вопрос (используя только 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
Существует ли список временных зон Pytz?
Преобразование строки unix timestamp в читаемую дату
Как преобразовать datetime в date?
Как получить день недели по заданной дате?
Как конвертировать секунды в часы, минуты и секунды?