В этом разделе представлены частые приемы работы с объектом даты и времени datetime.datetime()
.
datetime
,datetime
в секунды,datetime
из объектов date
и time
.datetime
человекочитаемую дату - строку c датой и временем,datetime.datetime()
,>>> import datetime >>> dt = datetime.datetime.today() >>> dt # datetime.datetime(2020, 5, 5, 14, 56, 40, 902733) # получаем отдельные компоненты # даты >>> print(dt.year, dt.month, dt.day) # 2020 5 5 # времени >>> print(dt.hour, dt.minute, dt.second) # 14 56 40 # Получаем объект даты >>> dt.date() # atetime.date(2020, 5, 5) # Получаем объект времени >>> dt.time() # datetime.time(14, 56, 40, 902733)
datetime
в секунды (timestamp
):Задача: имеем объект datetime
, необходимо его преобразовать в секунды (timestamp
).
>>> import datetime # Для преобразования получим объект `datetime`, # содержащий дату и время в настоящий момент >>> dt = datetime.datetime.now() >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5, 208688) # теперь получаем из `datetime` секунды - `timestamp` >>> second = dt.timestamp() >>> second # 1588762325.208688 # можно быстрее, одной строкой >>> second = datetime.datetime.now().timestamp() # 1588762325.208688 # если не нужны доли секунд, то # преобразуем в тип int >>> int(second) # 1588762325
timestamp
) в объект datetime
:Задача: имеем время в секундах, необходимо из секунд получить объект datetime
, что бы потом что-то сделать.
>>> import datetime # имеем время в секундах second = 1588762325 # преобразовываем секунды в объект 'datetime' # его же методом '.timestamp()' >>> dt = datetime.datetime.fromtimestamp(second) >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5) # дальше работаем как с объектом # получаем строку >>> dt.strfptint('%d.%m.%Y %H:%M') # '06.05.2020 13:52' # через сколько новый год >>> future_dt = datetime.datetime.strptime('01.01.2021', '%d.%m.%Y') >>> delta = future_dt - dt # через дней >>> delta.days # 239 # секунд >>> delta.seconds # 36475 # месяцев >>> 239 // 30 # 7
datetime
из отдельных объектов date
и time
:>>> import datetime # дата >>> date = datetime.date.today() # время >>> time = datetime.time(23, 55) # интервал >>> delta = datetime.timedelta(minutes=30) # соединяем все вместе >>> datetime.datetime.combine(date, time) + delta # datetime.datetime(2020, 5, 6, 0, 25)
Полный список директив форматирования смотрите в разделе "Коды форматирования strftime()
и strptime()
модуля datetime
".
>>> import datetime >>> dt = datetime.datetime.now() >>> dt.strftime('%H:%M - %m.%d.%Y года') # '09:56 - 05.06.2020 года' >>> dt.strftime('%H часов %M минут %m.%d.%Y года') # '09 часов 56 минут 05.06.2020 года' >>> dt.strftime('%m/%d/%y') # '05/06/20' >>> dt.strftime('%Y-%m-%d') # '2020-05-06' # форматирование даты при помощи функции format() >>> 'День: {0:%d}, Месяц: {0:%B}, время: {0:%H:%M}.'.format(dt) # 'День: 06, Месяц: May, время: 09:56.' # форматирование даты при помощи f-строк f'День: {dt:%d}, Месяц: {dt:%B}, время: {dt:%H:%M}' # 'День: 06, Месяц: May, время: 09:56.'
datetime.datetime()
:Полный список директив форматирования смотрите в разделе "Коды форматирования strftime()
и strptime()
модуля datetime
".
>>> import datetime >>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000' >>> format = '%a, %d %b %Y %H:%M:%S +0000' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2021, 4, 24, 16, 22, 54) >>> date_str = '24.12.2020 16:22' >>> format = '%d.%m.%Y %H:%M' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2020, 12, 24, 16, 22)
При вычитании дат получается объект продолжительности - datetime.timedelta()
Подсчет дней до события.
>>> import datetime >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 12, 6) >>> delta = date - today >>> delta.days # 213
Подсчет дней прошедших с события.
>>> import datetime >>> date = datetime.datetime(2019, 12, 31) >>> today = datetime.datetime.now() >>> delta = today - date >>> delta.days # 127
Узнать дату и время предстоящего или прошедшего события.
>>> import datetime >>> today = datetime.datetime.now() # узнаем, какая дата будет через 3 недели и 5 дней >>> delta = datetime.timedelta(weeks=3, days=5) >>> date = today + delta >>> date.day, date.month, date.year # (1, 6, 2020) # узнаем, какая дата была 100 дней назад >>> delta = datetime.timedelta(days=100) >>> date = today - delta >>> date.day, date.month, date.year # (27, 1, 2020) # узнаем, сколько время будет через 1 час 30 минут и 45 секунд >>> delta = datetime.timedelta(hours=1, minutes=30, seconds=45) >>> date = today + delta >>> date.hour, date.minute, date.second # (16, 18, 15)
datetime.datetime()
:datetime1
считается меньше datetime2
, когда datetime1
предшествует datetime2
во времени;datetime1
c параметром tz
не равным None
с datetime2
, у которого параметром tz=None
вызывается TypeError
. datetime1
c параметром tz
не равным None
никогда не будут равен datetime2
, у которого параметром tz=None
.>>> import datetime >>> today = datetime.datetime.now() >>> delta = datetime.timedelta(weeks=3, days=1) >>> date = today - delta >>> date < today # True >>> date = today + delta >>> date < today # False >>> date > today # True # Сравнение с заранее заданной датой >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 5, 6) >>> date.date() == today.date() # True