> **Источник:** https://python-all.ru/3.4/c-api/datetime.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты даты и времени

Модуль [`datetime`](https://python-all.ru/3.4/library/datetime.html#module-datetime) предоставляет различные объекты даты и времени. Перед использованием любой из этих функций заголовочный файл `datetime.h` должен быть включён в исходный код (обратите внимание: он не включается автоматически файлом `Python.h`), и макрос `PyDateTime_IMPORT` должен вызываться, обычно в составе функции инициализации модуля. Макрос помещает указатель на структуру C в статическую переменную `PyDateTimeAPI`, которая используется следующими макросами.

Макросы проверки типа:

#### `int PyDate_Check(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DateType` или является подтипом `PyDateTime_DateType`. *ob* не должен быть *NULL*.

#### `int PyDate_CheckExact(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DateType`. *ob* не должен быть *NULL*.

#### `int PyDateTime_Check(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DateTimeType` или является подтипом `PyDateTime_DateTimeType`. *ob* не должен быть *NULL*.

#### `int PyDateTime_CheckExact(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DateTimeType`. *ob* не должен быть *NULL*.

#### `int PyTime_Check(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_TimeType` или является подтипом `PyDateTime_TimeType`. *ob* не должен быть *NULL*.

#### `int PyTime_CheckExact(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_TimeType`. *ob* не должен быть *NULL*.

#### `int PyDelta_Check(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DeltaType` или является подтипом `PyDateTime_DeltaType`. *ob* не должен быть *NULL*.

#### `int PyDelta_CheckExact(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_DeltaType`. *ob* не должен быть *NULL*.

#### `int PyTZInfo_Check(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_TZInfoType` или является подтипом `PyDateTime_TZInfoType`. *ob* не должен быть *NULL*.

#### `int PyTZInfo_CheckExact(PyObject *ob)`

Возвращает истину, если *ob* имеет тип `PyDateTime_TZInfoType`. *ob* не должен быть *NULL*.

Макросы для создания объектов:

#### `PyObject* PyDate_FromDate(int year, int month, int day)`

*Возвращаемое значение: новая ссылка.*

Возвращает объект `datetime.date` с указанными годом, месяцем и днём.

#### `PyObject* PyDateTime_FromDateAndTime(int year, int month, int day, int hour, int minute, int second, int usecond)`

*Возвращаемое значение: новая ссылка.*

Возвращает объект `datetime.datetime` с указанными годом, месяцем, днём, часом, минутой, секундой и микросекундой.

#### `PyObject* PyTime_FromTime(int hour, int minute, int second, int usecond)`

*Возвращаемое значение: новая ссылка.*

Возвращает объект `datetime.time` с указанными часом, минутой, секундой и микросекундой.

#### `PyObject* PyDelta_FromDSU(int days, int seconds, int useconds)`

*Возвращаемое значение: новая ссылка.*

Возвращает объект `datetime.timedelta`, представляющий заданное количество дней, секунд и микросекунд. Выполняется нормализация, чтобы результирующее количество микросекунд и секунд находилось в диапазонах, описанных для объектов `datetime.timedelta`.

Макросы для извлечения полей из объектов даты. Аргумент должен быть экземпляром `PyDateTime_Date`, включая подклассы (например, `PyDateTime_DateTime`). Аргумент не должен быть *NULL*, и тип не проверяется:

#### `int PyDateTime_GET_YEAR(PyDateTime_Date *o)`

Возвращает год в виде положительного int.

#### `int PyDateTime_GET_MONTH(PyDateTime_Date *o)`

Возвращает месяц в виде int от 1 до 12.

#### `int PyDateTime_GET_DAY(PyDateTime_Date *o)`

Возвращает день в виде int от 1 до 31.

Макросы для извлечения полей из объектов datetime. Аргумент должен быть экземпляром `PyDateTime_DateTime`, включая подклассы. Аргумент не должен быть *NULL*, тип не проверяется:

#### `int PyDateTime_DATE_GET_HOUR(PyDateTime_DateTime *o)`

Возвращает часы в виде целого числа от 0 до 23.

#### `int PyDateTime_DATE_GET_MINUTE(PyDateTime_DateTime *o)`

Возвращает минуты в виде целого числа от 0 до 59.

#### `int PyDateTime_DATE_GET_SECOND(PyDateTime_DateTime *o)`

Возвращает секунды в виде целого числа от 0 до 59.

#### `int PyDateTime_DATE_GET_MICROSECOND(PyDateTime_DateTime *o)`

Возвращает микросекунды в виде целого числа от 0 до 999999.

Макросы для извлечения полей из объектов time. Аргумент должен быть экземпляром `PyDateTime_Time`, включая подклассы. Аргумент не должен быть *NULL*, тип не проверяется:

#### `int PyDateTime_TIME_GET_HOUR(PyDateTime_Time *o)`

Возвращает часы в виде целого числа от 0 до 23.

#### `int PyDateTime_TIME_GET_MINUTE(PyDateTime_Time *o)`

Возвращает минуты в виде целого числа от 0 до 59.

#### `int PyDateTime_TIME_GET_SECOND(PyDateTime_Time *o)`

Возвращает секунды в виде целого числа от 0 до 59.

#### `int PyDateTime_TIME_GET_MICROSECOND(PyDateTime_Time *o)`

Возвращает микросекунды в виде целого числа от 0 до 999999.

Макросы для извлечения полей из объектов timedelta. Аргумент должен быть экземпляром `PyDateTime_Delta`, включая подклассы. Аргумент не должен быть *NULL*, тип не проверяется:

#### `int PyDateTime_DELTA_GET_DAYS(PyDateTime_Delta *o)`

Возвращает количество дней в виде целого числа от -999999999 до 999999999.

Новое в версии 3.3.

#### `int PyDateTime_DELTA_GET_SECONDS(PyDateTime_Delta *o)`

Возвращает количество секунд в виде целого числа от 0 до 86399.

Новое в версии 3.3.

#### `int PyDateTime_DELTA_GET_MICROSECOND(PyDateTime_Delta *o)`

Возвращает количество микросекунд в виде целого числа от 0 до 999999.

Новое в версии 3.3.

Макросы для удобства модулей, реализующих DB API:

#### `PyObject* PyDateTime_FromTimestamp(PyObject *args)`

*Возвращаемое значение: новая ссылка.*

Создаёт и возвращает новый объект `datetime.datetime`, принимая кортеж аргументов, подходящий для передачи в `datetime.datetime.fromtimestamp()`.

#### `PyObject* PyDate_FromTimestamp(PyObject *args)`

*Возвращаемое значение: новая ссылка.*

Создаёт и возвращает новый объект `datetime.date`, принимая кортеж аргументов, подходящий для передачи в `datetime.date.fromtimestamp()`.
