Как получить вчерашнюю дату в Python?
@ loyal Вы можете использовать timedelta() функцию в Python, чтобы получить вчерашнюю дату, посмотрите пример кода ниже:
from datetime import date from datetime import timedelta yesterday = date.today() - timedelta(days=1) # Вывод: 2022-02-17 print(yesterday)
Вы можете получить вчерашнюю дату в Python, используя модуль datetime . Вот пример кода:
from datetime import date, timedelta # получаем сегодняшнюю дату today = date.today() # вычитаем из сегодняшней даты один день yesterday = today - timedelta(days=1) print("Вчерашняя дата была:", yesterday)
Этот код создаст объект date для сегодняшней даты, а затем вычтет из него один день, чтобы получить вчерашнюю дату. Вывод будет иметь формат «YYYY-MM-DD».
Получить дату несколько дней или месяцев назад
Этот класс представляет собой заданный промежуток времени. И используется, в большинстве своем, для получения какой то прошедшей либо грядущей даты либо времени посредством вычитания или сложения двух дат. Например, если Вам нужно получить дату через час, дату вчерашнего дня, дату месяц назад и т.д.
datetime.timedelta(
days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0 )
Все аргументы являются необязательными и по умолчанию равны 0. Аргументы могут быть целыми или дробными , а может быть положительными либо отрицательными .
Примеры использования
Получаем дату вчерашнего дня:
from datetime import date, timedelta
print(date.today())
print(date.today() - timedelta(days=1))
2015-12-14
2015-12-13
Получаем дату месяц назад:
from datetime import date, timedelta
print(date.today())
print(date.today() - timedelta(days=31))
2015-12-14
2015-11-13
Получаем время через 2 часа назад:
from datetime import timedelta, datetime
print(datetime.now())
print(datetime.now() + timedelta(hours=2))
2015-12-14 13:59:00.724516
2015-12-14 15:59:00.724611
Получаем дату без трех часов как неделю назад:
from datetime import timedelta, datetime
print(datetime.now())
print(datetime.now() - timedelta(days=7, hours=3))
2015-12-14 14:05:31.426143
2015-12-07 11:05:31.426229
How to find the date n days ago in Python?
I would like to write a script where I give Python a number of days (let’s call it d ) and it gives me the date we were d days ago. I am struggling with the module datetime:
import datetime tod = datetime.datetime.now() d = timedelta(days = 50) a = tod - h Type Error : unsupported operand type for - : "datetime.timedelta" and "datetime.datetime"
5 Answers 5
You have mixed something up with your variables, you can subtract timedelta d from datetime.datetime.now() with no issue:
import datetime tod = datetime.datetime.now() d = datetime.timedelta(days = 50) a = tod - d print(a) 2014-12-13 22:45:01.743172
you can also format the date with the method strftime(), e.g. get it in local date format, get just date (without time), etc.etc. At print write print(strftime( %x)) for local vesrion of date. All the legal formats here: w3schools.com/python/python_datetime.asp
from datetime import datetime, timedelta N_DAYS_AGO = 5 today = datetime.now() n_days_ago = today - timedelta(days=N_DAYS_AGO) print today, n_days_ago
If your arguments are something like, yesterday,2 days ago, 3 months ago, 2 years ago. The function below could be of help in getting the exact date for the arguments. You first need to import the following date utils
import datetime from dateutil.relativedelta import relativedelta
Then implement the function below
def get_past_date(str_days_ago): TODAY = datetime.date.today() splitted = str_days_ago.split() if len(splitted) == 1 and splitted[0].lower() == 'today': return str(TODAY.isoformat()) elif len(splitted) == 1 and splitted[0].lower() == 'yesterday': date = TODAY - relativedelta(days=1) return str(date.isoformat()) elif splitted[1].lower() in ['hour', 'hours', 'hr', 'hrs', 'h']: date = datetime.datetime.now() - relativedelta(hours=int(splitted[0])) return str(date.date().isoformat()) elif splitted[1].lower() in ['day', 'days', 'd']: date = TODAY - relativedelta(days=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['wk', 'wks', 'week', 'weeks', 'w']: date = TODAY - relativedelta(weeks=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['mon', 'mons', 'month', 'months', 'm']: date = TODAY - relativedelta(months=int(splitted[0])) return str(date.isoformat()) elif splitted[1].lower() in ['yrs', 'yr', 'years', 'year', 'y']: date = TODAY - relativedelta(years=int(splitted[0])) return str(date.isoformat()) else: return "Wrong Argument format"
You can then call the function like this:
print get_past_date('5 hours ago') print get_past_date('yesterday') print get_past_date('3 days ago') print get_past_date('4 months ago') print get_past_date('2 years ago') print get_past_date('today')