Модуль datetime

Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями. Классы, предоставляемые модулем datetime:

datetime.date(year, month, day)

стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.

import datetime
d = datetime.date(2012, 12, 14)

print(d.year) # 2012
print(d.day)  # 14
print(d.month) # 12

datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

содержит всю информацию объектов datetime.date плюс datetime.time.

import datetime

a = datetime.datetime(2017, 3, 5)
print(a) # datetime.datetime(2017, 3, 5, 0, 0)

b = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(b) # datetime.datetime(2017, 3, 5, 12, 30, 10)

d = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(d.year) # 2017
print(d.second) # 10
print(d.hour) # 12

datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе.

datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.

datetime.timedelta

описывает определенный период во времени, который находится между двумя различными моментами

АтрибутЗначение
daysМежду −999999999 and 999999999 включительно
secondsМежду 0 и 86399 включительно
microsecondsМежду 0 и 999999 включительно

Поддерживаемые операции

ОперацияРезультат
t1 = t2 + t3Суммирует дельту между датами
t1 = t2 — t3Разница дельт между датами
t1 = t2 * i or t1 = i * t2Умножение дельты на целое число
t1 = t2 * f or t1 = f * t2Дельта умножается на число с плавающей точкой
f = t2 / t3Деление общей длительности t2 на интервал t3. Возвращает объект с плавающей точкой
t1 = t2 / f or t1 = t2 / iДельта делится на число с плавающей точкой или целое
t1 = t2% t3Остаток часть вычисляется как объект timedelta
q, r = divmod(t1, t2)Вычисляет частное и остаток: q = t1 // t2 (3) и r = t1% t2. q — целое число, а r — объект deltatime
+t1Возвращает объект timedelta с полностью идентичным значением t1
—t1возвращает объект timedelta с полностью противоположным значением t1
abs(t)возвращает объект timedelta с положительным значением всех свойств t
str(t)возвращает строковое представление объекта a в формате, заданном по умолчанию
repr(t)возвращает строковое представление объекта a в формате с отрицательными значениями

timedelta.total_seconds()

Возвращает общее количество секунд, содержащихся в продолжительности. Эквивалентно (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 * 6)/10 * 6 рассчитано с включенным истинным делением. Пример:

>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> another_year = timedelta(weeks=40, days=84, hours=23,
...                          minutes=50, seconds=600)  # adds up to 365 days
>>> year.total_seconds()
31536000.0
>>> year == another_year
True
>>> ten_years = 10 * year
>>> ten_years, ten_years.days // 365
(datetime.timedelta(days=3650), 10)
>>> nine_years = ten_years - year
>>> nine_years, nine_years.days // 365
(datetime.timedelta(days=3285), 9)
>>> three_years = nine_years // 3
>>> three_years, three_years.days // 365
(datetime.timedelta(days=1095), 3)
>>> abs(three_years - ten_years) == 2 * three_years + year
True

datetime.tzinfo

абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и/или летнего времени).

Методы класса datetime:

datetime.combine(date, time)

объект datetime из комбинации объектов date и time.

datetime.fromtimestamp(timestamp)

дата из стандартного представления времени.

datetime.fromordinal(ordinal)

дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.

datetime.now(tz=None)

объект datetime из текущей даты и времени.

datetime.today()

объект datetime из текущей даты и времени. Работает также, как и datetime.now() со значением tz=None.

datetime.strptime(date_string, format)

преобразует строку в datetime по формату

ФорматЗначение
%aСокращенное название дня недели
%AПолное название дня недели
%bСокращенное название месяца
%BПолное название месяца
%cДата и время
%dДень месяца 01,31
%HЧас (24-часовой формат) 00,23
%IЧас (12-часовой формат) 01,12
%jДень года 001,366
%mНомер месяца 01,12
%MЧисло минут 00,59
%pДо полудня или после (при 12-часовом формате)
%SЧисло секунд 00,61
%UНомер недели в году (нулевая неделя начинается с воскресенья) 00,53
%wНомер дня недели 0(Sunday), 6
%WНомер недели в году (нулевая неделя начинается с понедельника) 00,53
%xДата
%XВремя
%yГод без века 00,99
%YГод с веком
%ZВременная зона
%%Знак '%'

datetime.strftime(format)

преобразует datetime в строку по формату

ФорматЗначение
%aСокращенное название дня недели
%AПолное название дня недели
%bСокращенное название месяца
%BПолное название месяца
%cДата и время
%dДень месяца 01,31
%HЧас (24-часовой формат) 00,23
%IЧас (12-часовой формат) 01,12
%jДень года 001,366
%mНомер месяца 01,12
%MЧисло минут 00,59
%pДо полудня или после (при 12-часовом формате)
%SЧисло секунд 00,61
%UНомер недели в году (нулевая неделя начинается с воскресенья) 00,53
%wНомер дня недели 0(Sunday), 6
%WНомер недели в году (нулевая неделя начинается с понедельника) 00,53
%xДата
%XВремя
%yГод без века 00,99
%YГод с веком
%ZВременная зона
%%Знак '%'

datetime.date()

объект даты (с отсечением времени).

datetime.isoweekday()

день недели в виде числа, понедельник — 1, воскресенье — 7.

datetime.isocalendar()

кортеж (год в формате ISO, ISO номер недели, ISO день недели).

datetime.isoformat(sep='T')

красивая строка вида «YYYY-MM-DDTHH: MM: SS.mmmmmm» или, если microsecond == 0, «YYYY-MM-DDTHH: MM: SS»

datetime.replace ([year[, month[, day[, hour, minute, second, microsecond, tzinfo]]]])

возвращает новый объект datetime с изменёнными атрибутами.

datetime.time()

объект времени (с отсечением даты).

datetime.timetuple()

возвращает struct_time из datetime.

datetime.timestamp()

возвращает время в секундах с начала эпохи.

datetime.toordinal()

количество дней, прошедших с 01.01.1970.

datetime.weekday()

день недели в виде числа, понедельник — 0, воскресенье — 6.

Поддерживаемые операции:

ОперацияРезультат
datetime2 = datetime1 + timedeltaПрибавляет к дате указанный период
datetime2 = datetime1 — timedeltaВычитает из даты указанный период
timedelta = datetime1 — datetime2Возвращает разницу между двумя датами
datetime1 < datetime2Сравнивает дату и время (3)