python
December 14, 2022

Работа с datetime в Python

Для проведения самых распространенных действий с датой и временем в Python (преобразования и арифметические операции) наиболее удобны библиотека datetime и dateutil. В этом статье рассмотрим ключевые манипуляции:

Преобразования типов

datetime <-> строка

Чтобы получить дату и время из строки, воспользуйтесь функцией strptime модуля datetime:

from datetime import datetime

d = datetime.strptime('1970-01-01 03:01:01', '%Y-%m-%d %H:%M:%S')
d

Обратное преобразование из даты в строку можно осуществить методом strftime:

d.strftime('%H:%M:%S %Y/%m/%d')

datetime<>unix timestamp

Получить дату и время из unix timestamp (количество секунд, прошедших с 01 января 1970 - "начало эпохи") можно с функцией fromtimestamp (в локальном времени или выбранном часовом поясе) или utcfromtimestamp (в универсальном скоординированном времени):

display(datetime.fromtimestamp(1666622222))
display(datetime.utcfromtimestamp(1666622222))

Наоборот, получить количество секунд с начала эпохи из datetime можно методом timestamp:

d = datetime.strptime('2022-11-11 03:01:01', '%Y-%m-%d %H:%M:%S')
d.timestamp()

Текущие дата и время

Зачастую нас интересуют текущие даты и метки времени, которые возвращаются функциями today, now (с возможностью задания часового пояса), utcnow (универсальное время UTC):

display(datetime.today())
display(datetime.now())
display(datetime.utcnow())

Получение частей времени

Для получения частей даты и времени используйте представленные ниже атрибуты и методы с интуитивно понятным значением:

d = datetime.strptime('2022-11-11 03:01:01', '%Y-%m-%d %H:%M:%S')

d.year, d.month, d.day, d.hour, d.minute, d.second, d.weekday()

Операции

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

from dateutil.relativedelta import relativedelta

datetime.today() - relativedelta(years=2, months=1, days=5, hours=3, 
                                 minutes=10, seconds=10)