Дата и время в Питоне
Говоря про временные ряды, мы уже начали анализировать данные, в которых присутствует дата и время (в частности, в библиотеке Pandas). Сегодня мы сделаем шаг назад и посмотрим в целом как работать с датой и временем в Питоне.

Модуль datetime
В базовом функционале Питона нет отдельного типа данных, отвечающего за дату и время. Необходимо импортировать модуль, который называется datetime.
Первая особенность, про которую стоит сказать, datetime — это не только название модуля, но и название одного из классов внутри этого модуля. Помимо класса datetime, нас будет интересовать ещё один класс — timedelta.

Перейдем к практике.
Импорт модуля и класса datetime
Самый простой способ — импортировать весь модуль datetime.
Далее предположим, что мы хотим воспользоваться функцией now(), которая находится внутри класса datetime. Функция now() выводит текущие дату и время.
Как вы видите, это не очень удобно. Можно импортировать только класс datetime и обращаться непосредственно к нему.
Объект datetime и функция now()
Теперь поговорим подробнее про то, что выводит функция now().
На выходе мы получаем текущие дату и время по UTC⧉, потому что серверы Google Colab настроены именно на это время (московское время, например, отличается на +3 часа). Сам вывод состоит из следующих компонентов.

Мы можем обратиться к каждому из этих компонентов по отдельности.
Мы также можем посмотреть на день недели, причем в двух форматах. Метод .weekday() считает, что неделя начинается с нуля, метод .isoweekday(), что с единицы.

Так как 18 ноября 2021 года — это четверг, то применив эти методы, мы должны получить цифры три и четыре соответственно.
Разумеется, когда вы будете самостоятельно исполнять код в ноутбуке, будут выведены текущие дата и время сервера Google.
Объект datetime, полученный из функции now(), не содержит данных о часовом поясе.
Для того чтобы добавить такую информацию и вывести, например, другой часовой пояс, нам нужно воспользоваться модулем pytz.
Посмотрим, не появился ли часовой пояс.
Timestamp
До сих пор мы работали с привычным для нас делением на годы, месяцы, дни, часы, минуты и секунды. При этом компьютеры используют так называемое время Unix, которое отсчитывается в секундах c первого января 1970 года. Для отображения даты и времени в таком формате в Питоне есть объект timestamp (по-английски — «временная отметка»).
Посмотрим, сколько секунд и микросекунд прошло с 01.01.1970 и до момента исполнения кода.
Не составляет труда вернуть timestamp обратно в привычный формат.
Создание объекта datetime вручную
Дату и время не обязательно получать из функции now(). Мы вполне можем передать объекту datetime наши собственные параметры, например, день рождения Питона.
Обратите внимание, мы ввели только год, месяц и день. Это обязательные параметры. Остальные параметры можно не вводить, в этом случае они заполнятся нулями.
Из этого объекта мы также можем извлечь компоненты (год, месяц, число и т.д.) и создать timestamp.
Преобразование строки в datetime и наоборот
Строка в datetime через .strptime()
Если дата содержится в строковом формате, Питон не сможет извлечь из нее компоненты. Предварительно строку нужно преобразовать. Для этого есть метод .strptime().
Преобразуем эту строку в объект datetime с помощью метода .strptime().
Как вы видите, сначала мы передаём этому методу саму строку, а затем тот формат, в котором содержится дата и время (иначе Питон не поймет, к чему относится конкретное число).
Давайте расшифруем каждое из обозначений:
- % Y — год в формате ГГГГ, например: 1995, 2003 и т.д.
- % m — месяц в виде числа с нулями, например, январь — 01, февраль — 02 и т.д.
- % d — день месяца в виде числа с нулями, например: 01, 02, …, 31
- % H — час в 24-часовом формате в виде числа с нулями, например: 00, 01, …, 23
- % M — минуты в виде числа с нулями, например: 00, 01, …, 59
- % S — секунды в виде числа с нулями, например: 00, 01, …, 59
Дефисы, пробелы, двоеточия или, например, запятые — тоже элементы формата и их тоже нужно указывать.
Datetime в строку через .strftime()
Обратное преобразование также возможно. Это может быть полезно, если мы захотим вывести дату и время в строго определенном формате.
Вычислить разницу во времени между двумя временными строками в Python

Бывают случаи, когда нам приходится иметь дело с проблемами, связанными с датой и временем в программировании. В Python данные и время сами по себе не являются типами данных. Тем не менее, Python предоставляет широкий спектр функций, а также библиотеки, которые помогают в решении таких проблем. Одна из проблем, связанных с датой и временем, — это вычисление временного интервала между двумерными строками.
В этом руководстве демонстрируются различные способы вычисления временного интервала между двумя строками в Python.
Используйте datetime.strptime() для вычисления разницы во времени между двумя строками времени в Python
Класс datatime предоставляет пользователю ряд функций для работы с датой и временем в Python. Функция strptime() используется для синтаксического анализа строкового значения для представления времени в заданном формате. Строковое значение и формат времени сохраняются в качестве аргумента функции.
Вот пример программы:
Здесь две строки времени хранятся в двух переменных с помощью функции datetime.strptime() . Обратите внимание, что %H , %M и %S являются представителями Hours , Minutes и Seconds . После того, как две строки времени сохранены в их формате времени, временной интервал между ними вычисляется путем простого вычитания двух переменных.
Используйте time.sleep() для вычисления разницы во времени между двумя временными строками в Python
В Python есть модуль, известный как time , который помогает печатать время в виде объектов, чисел и строк. Он также предлагает множество функций для выполнения таких задач, как измерение времени и измерение эффективности кода.
Одной из функций модуля time Python является функция sleep() . Эта функция приостанавливает выполнение текущего блока кода только на определенный период времени, указанный пользователем.
Взгляните на этот пример кода:
Обратите внимание, что в приведенном выше коде также используется функция time() из модуля time . Эта функция помогает вернуть количество секунд, прошедших с эпохи 1 января 1970 г., 00:00:00 по всемирному координированному времени. Переменная 20 в аргументе функции sleep() представляет 20 секунд. В этом коде два значения времени берутся с эпохи, и между ними код перестает выполняться на 20 секунд.
Используйте datetime.timedelta() для вычисления разницы во времени между двумя строками времени в Python
Есть еще один модуль Python, известный как модуль datetime . Этот модуль также предоставляет множество классов и функций для работы с датами, временем и временными интервалами.
Класс timedelta() — одна из функций модуля datetime . Он используется для обозначения определенной продолжительности времени или разницы между двумя датами и временем. Функции содержат множество аргументов, таких как дни, миллисекунды, микросекунды, секунды, минуты, часы, а также недели.
Пользователь может указать эти аргументы в соответствии с потребностями программы. Посмотрите пример программы здесь:
Обратите внимание, что в приведенном выше коде не все аргументы упоминаются в классе timedelta .
Python Сравнить dateTime.
Когда у вас есть два объекта TateTime, дата и время, которые один из них представляет, может быть раньше или последним, чем у других, или равных.
Для сравнения объектов DateTime вы можете использовать операторы сравнения, такие как больше, чем меньше или равны. Как и любая другая операция сравнения, возвращается логическое значение.
В этом руководстве мы узнаем, как сравнивать и время в объектах DateTime.
Проверьте, будет ли одно datetime больше, чем другие dateTime
Вы можете использовать больше чем Оператор > Чтобы проверить, является ли один объект DateTime выше, чем у других.
Сначала давайте понять, что мы имеем в виду, когда одна дата и время больше, чем другие. Например, если вы принимаете текущую дату и время, и какая-то прошлая дата и время для сравнения; Текущая дата и время больше, чем у прошлой даты. Точно так же, будущая дата и время больше, чем текущая дата и время. То же объяснение проводится для любых двух дат.
Хронологически, что когда-либо произошло, сначала меньше.
В следующей программе мы инициализируем два объекта TATETIME, а затем сравнить, если сначала один превышает второго.
Мы инициализировали три объекта DateTime. Все ценности в течение года, день часа, минуты и второй такое же, но изменились в стоимости месяца. D1 имеет месяц, равный 5, D2 имеет месяц, равный 7 и D3 имеет месяц, равный 6.
Проверьте, будет ли One DateTime меньше, чем другие dateTime
Вы можете использовать меньше чем Оператор сравнения < Чтобы проверить, является ли один объект DateTime меньше, чем у других.
В следующей программе мы инициализируем два объекта TATETIME, а затем сравнить, если сначала будет менее чем вторым.
Проверьте, будут ли два объекта TateTime равны
Вы можете использовать равно Оператор сравнения = Чтобы проверить, имеет ли один объект DateTime Objectime, что и другое.
В следующей программе мы инициализируем два объекта TATETIME, а затем проверьте, имеют ли оба объекта TateTime Objects, такую же дата и время.
Сравнить только даты объектов dateTime
В следующей программе мы инициализируем три объекта TATETIME и сравните только даты и игнорируйте время.
Сравнить только раз объектов DateTime
В следующей программе мы инициализируем три объекты TATETIME и сравните только время и игнорируйте часть даты.
Резюме
Суммируя этот учебник Python, мы узнали, как сравнивать два объекта DateTime, как сравнить даты объектов DateTime и как сравнивать объекты DateTime. Аналогичным образом, вы можете сравнить объекты DateTime на более гранулированном уровне, подобном, если у одного есть больший месяц или меньшей день или более ранний час и такой, доступа к соответствующему значению от объекта DateTime.
datetime — Базовые типы для представления даты и времени¶
Модуль datetime предоставляет классы для управления датой и временем.
Основное внимание в реализации уделяется эффективному извлечению атрибутов для форматирования и обработки вывода; арифметика даты и времени также поддерживается.
Модуль calendar Общие календарные функции. Модуль time Доступ к времени и преобразования. Пакет dateutil Сторонняя библиотека с расширенной поддержкой часовых поясов и парсинга.
Осведомлённые и наивные объекты¶
Объекты даты и времени могут быть разделены на «осведомлённые» или «наивные» в зависимости от того, включают ли они информацию о часовом поясе или нет.
Обладая достаточными знаниями о применимых алгоритмических и политических настройках времени, таких как информация о часовом поясе и переходе на летнее время, осведомлённый объект может расположить себя относительно других осведомлённых объектов. Осведомлённый объект представляет собой момент времени, который не подлежит интерпретации. [1]
Наивный объект не содержит достаточно информации, чтобы однозначно расположить себя относительно других объектов даты/времени. Независимо от того, представляет ли наивный объект всемирное координированное время (UTC), местное время или время в каком-либо другом часовом поясе, зависит исключительно от программы, точно так же, как это зависит от программы, представляет ли число метры, мили или массу. Наивные объекты легко понять и с ними легче работать за счёт игнорирования некоторых аспектов реальности.
Для приложений, требующих осведомлённых объектов, объекты datetime и time имеют необязательный атрибут информации о часовом поясе, tzinfo , который может быть установлен как экземпляр подкласса абстрактного класса tzinfo . Эти объекты tzinfo собирают информацию о смещении от времени UTC, имени часового пояса и о том, действует ли летнее время.
Только один класс tzinfo , класса timezone , поставляется модулем datetime . Класс timezone может представлять простые часовые пояса с фиксированными смещениями от UTC, например, сам UTC или часовые пояса EST и EDT в Северной Америке. Поддержка часовых поясов на более глубоких уровнях детализации зависит от приложения. Правила корректировки времени во всем мире носят скорее политический, чем рациональный характер, часто меняются, и нет стандарта, подходящего для всех приложений, кроме UTC.
Константы¶
Модуль datetime экспортирует следующие константы:
Наименьший номер года, разрешенный в объекте date или datetime . MINYEAR — это 1 .
Наибольший номер года, разрешенный в объекте date или datetime . MAXYEAR — это 9999 .
Доступные типы¶
Идеализированная наивная дата, предполагающая, что текущий Григорианский календарь всегда был и всегда будет в силе. Атрибуты: year , month и day .
class datetime. time
Идеализированное время, не зависящее от какого-либо дня, при условии, что у каждого дня есть ровно 24*60*60 секунд. (Здесь нет понятия «дополнительные секунды».) Атрибуты: hour , minute , second , microsecond и tzinfo .
Комбинация даты и времени. Атрибуты: year , month , day , hour , minute , second , microsecond и tzinfo .
class datetime. timedelta
Продолжительность, выражающая разницу между двумя экземплярами date , time или datetime с точностью до микросекунд.
class datetime. tzinfo
Абстрактный базовый класс для информационных объектов часового пояса. Они используются классами datetime и time для предоставления настраиваемого понятия корректировки времени (например, для учёта часового пояса и/или перехода на летнее время).
class datetime. timezone
Класс, реализующий абстрактный базовый класс tzinfo как фиксированное смещение от UTC.
Добавлено в версии 3.2.
Объекты этих типов неизменяемы.
Общие свойства¶
У типов date , datetime , time и timezone есть следующие общие особенности:
- Объекты этих типов неизменяемы.
- Объекты этих типов являются хешируемыми, что означает, что их можно использовать в качестве ключей словаря.
- Объекты этих типов поддерживают эффективный пиклинг (pickling) через модуль pickle .
Определение того, является ли объект осведомлённым или наивным¶
Объекты типа date всегда наивны.
Объект типа time или datetime может быть осведомлённым или наивным.
Объект d datetime может быть осведомлённым, если выполняются оба следующих условия:
- d.tzinfo не None
- d.tzinfo.utcoffset(d) не возвращает None
В противном случае d наивен.
Объект time t может быть осведомлённым, если выполняются оба следующих условия:
- t.tzinfo не None
- t.tzinfo.utcoffset(None) не возвращает None .
В противном случае t наивен.
Различие между осведомлёнными и наивными не применимо к объектам timedelta .
Объекты timedelta ¶
Объект timedelta представляет продолжительность, разницу между двумя датами или временем.
class datetime. timedelta ( days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0 ) ¶
Все аргументы являются необязательными и по умолчанию равны 0 . Аргументы могут быть целыми числами или числами с плавающей запятой, а также могут быть положительными или отрицательными.
Внутри хранятся только days, seconds и microseconds. Аргументы преобразуются в эти единицы:
- Миллисекунда преобразуется в 1000 микросекунд.
- Минута конвертируется в 60 секунд.
- Час конвертируется в 3600 секунд.
- Неделя конвертируется в 7 дней.
и дни, секунды и микросекунды затем нормализуются так, чтобы представление было уникальным, с
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24 (количество секунд в одном дне)
- -999999999 <= days <= 999999999
В следующем примере показано, как любые аргументы, кроме days, seconds и microseconds, «объединяются» и нормализуются в три результирующих атрибута:
Если какой-либо аргумент является числом с плавающей запятой и есть дробные микросекунды, дробные микросекунды, оставшиеся от всех аргументов, объединяются, и их сумма округляется до ближайшей микросекунды с использованием разрешения конфликтов от половины до чётности. Если аргумент не является числом с плавающей запятой, процессы преобразования и нормализации точны (информация не теряется).
Если нормализованное значение дней выходит за пределы указанного диапазона, вызывается исключение OverflowError .
Обратите внимание, что нормализация отрицательных значений поначалу может показаться неожиданной. Например:
Самый негативный объект timedelta , timedelta(-999999999) .
Самый положительный объект timedelta , timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) .
Наименьшее возможное различие между не равными объектами timedelta , timedelta(microseconds=1) .
Обратите внимание, что из-за нормализации timedelta.max > -timedelta.min . -timedelta.max не может быть представлен как объект timedelta .
Атрибуты экземпляра (только для чтения):
| Атрибут | Значение |
|---|---|
| days | От -999999999 до 999999999 включительно |
| seconds | От 0 до 86399 включительно |
| microseconds | От 0 до 999999 включительно |
| Операция | Результат |
|---|---|
| t1 = t2 + t3 | Сумма t2 и t3. После этого t1—t2 == t3 и t1—t3 == t2 являются true. (1) |
| t1 = t2 — t3 | Разность t2 и t3. После этого t1 == t2 — t3 и t2 == t1 + t3 являются true. (1)(6) |
| t1 = t2 * i or t1 = i * t2 | Дельта, умноженная на целое число. Впоследствии t1 // i == t2 является true, представленное i != 0 . |
| В общем, t1 * i == t1 * (i-1) + t1 является true. (1) | |
| t1 = t2 * f или t1 = f * t2 | Дельта, умноженная на число с плавающей точкой. Результат округляется до ближайшего кратного timedelta.resolution с использованием округления наполовину к чётному. |
| f = t2 / t3 | Деление (3) общей длительности t2 на единицу интервала t3. Возвращает объект float . |
| t1 = t2 / f или t1 = t2 / i | Дельта делится на число float или int. Результат округляется до ближайшего кратного timedelta.resolution с использованием округления от половины до четности. |
| t1 = t2 // i или t1 = t2 // t3 | Целочисленное деление, а остаток (если есть) выбрасывается. Во втором случае возвращается целое число. (3) |
| t1 = t2 % t3 | Остаток рассчитывается как timedelta объект. (3) |
| q, r = divmod(t1, t2) | Вычисляет частное и остальное: q = t1 // t2 (3) и r = t1 % t2 . q является целым числом, а r timedelta объектом. |
| +t1 | Возвращает timedelta объект с некоторым значением. (2) |
| -t1 | Эквивалент timedelta (-t1.days, —t1.seconds, —t1.microseconds), и t1* -1. (1)(4) |
| abs(t) | Эквивалентно +t при t.days >= 0 и —t когда t.days < 0 . (2) |
| str(t) | Возвращает строку в форме [D day[s], ][H]H:MM:SS[.UUUUUU] , где D является отрицательным для отрицательных t . (5) |
| repr(t) | Возвращает строковое представление объекта timedelta как требование конструктора с каноническим атрибутом значения. |
Это точно, но может выходить за пределы.
Это точно и не может переполниться.
-timedelta.max не может быть представлен как объект timedelta .
Строковые представления объектов timedelta нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательных временных дельт. Например:
Выражение t2 — t3 всегда будет равно выражению t2 + (-t3) , за исключением случая, когда t3 равно timedelta.max ; в этом случае первое предоставит результат, а второе — переполнение.
В дополнение к операциям, перечисленным выше, объекты timedelta поддерживают определенные операции сложения и вычитания с объектами date и datetime (см. ниже).
Изменено в версии 3.2: Теперь поддерживаются деление с округлением вниз и истинное деление объекта timedelta на другой объект timedelta , а также операции с остатками и функция divmod() . Теперь поддерживаются истинное деление и умножение объекта timedelta на объект float .
Поддерживаются сравнения объектов timedelta с некоторыми оговорками.
Сравнение == или != всегда возвращает bool , независимо от типа сравниваемого объекта:
Для всех других сравнений (например, < и > ), когда объект timedelta сравнивается с объектом другого типа, вызывается TypeError :
В логических контекстах объект timedelta считается истинным тогда и только тогда, когда он не равен timedelta(0) .
Возвращает общее количество содержащихся в продолжительности секунд. Эквивалентна td / timedelta(seconds=1) . Для отличных от секунд единиц интервала, используйте форму деления напрямую (например, td / timedelta(microseconds=1) ).
Обратите внимание, что для очень больших интервалов времени (более 270 лет на большинстве платформ) этот метод будет терять точность в микросекундах.
Добавлено в версии 3.2.
Примеры использования: timedelta ¶
Дополнительный пример нормализации:
Объекты date ¶
Объект date представляет дату (год, месяц и день) в идеализированном календаре, текущий Григорианский календарь неограниченно расширен в обоих направлениях.
1 января 1 года называется днём номер 1, 2 января 1 года называется днём номер 2 и так далее. [2]
Все аргументы обязательны. Аргументы должны быть целыми числами в следующих диапазонах:
- MINYEAR <= year <= MAXYEAR
- 1 <= month <= 12
- 1 <= day <= количество дней в данном месяце и году
Если указан аргумент за пределами этих диапазонов, возникает ValueError .
Остальные конструкторы, все методы класса:
classmethod date. today ( ) ¶
Возвращает текущую местную дату.
Это эквивалент date.fromtimestamp(time.time()) .
classmethod date. fromtimestamp ( timestamp ) ¶
Возвращает местную дату, соответствующую метке времени POSIX, например, возвращенную time.time() .
Может вызвать OverflowError , если метка времени выходит за пределы диапазона значений, поддерживаемых функцией localtime() платформы C, и OSError при сбое localtime() . Обычно это ограничивается годами с 1970 по 2038 год. Обратите внимание, что в системах, не относящихся к POSIX, которые включают дополнительные секунды в своё понятие метки времени, секунды координации игнорируются fromtimestamp() .
Изменено в версии 3.3: Вызывается OverflowError вместо ValueError , если отметка времени выходит за пределы диапазона значений, поддерживаемых функцией localtime() платформы C. Вызывается OSError вместо ValueError при ошибке localtime() .
Возвращает дату, соответствующую Пролептическому Григорианскому порядковому номеру, где 1 января 1 года имеет порядковый номер 1.
ValueError не вызывается, если только 1 <= ordinal <= date.max.toordinal() . Для любой даты d, date.fromordinal(d.toordinal()) == d .
classmethod date. fromisoformat ( date_string ) ¶
Возвращает date , соответствующий date_string в формате YYYY-MM- DD :
Это обратное date.isoformat() . Поддерживается только формат YYYY-MM- DD .
Добавлено в версии 3.7.
Возвращает date , соответствующий календарной дате ISO, указанной с указанием года, недели и дня. Это функция, обратная date.isocalendar() .
Добавлено в версии 3.8.
Самая ранняя представимая дата, date(MINYEAR, 1, 1) .
Самая последняя представимая дата, date(MAXYEAR, 12, 31) .
Наименьшее возможное различие между объектами с разными датами, timedelta(days=1) .
Атрибуты экземпляра (только для чтения):
Между MINYEAR и MAXYEAR включительно.
От 1 до 12 включительно.
От 1 до количества дней в данном месяце данного года.
| Операция | Результат |
|---|---|
| date2 = date1 + timedelta | date2 — это timedelta.days дней, удалённых из date1. (1) |
| date2 = date1 — timedelta | Вычисляет date2 так, что date2 + timedelta == date1 . (2) |
| timedelta = date1 — date2 | (3) |
| date1 < date2 | date1 считается меньше date2, когда date1 предшествует date2 во времени.(4) |
- date2 перемещается вперед во времени, если timedelta.days > 0 , или назад, если timedelta.days < 0 . Потом date2 — date1 == timedelta.days . timedelta.seconds и timedelta.microseconds игнорируются. OverflowError вызывается, если date2.year будет меньше MINYEAR или больше MAXYEAR .
- timedelta.seconds и timedelta.microseconds игнорируются.
- Это точно и не может быть переполнено. timedelta.seconds и timedelta.microseconds равны 0, а date2 + timedelta == date1 после.
- Другими словами, date1 < date2 тогда и только тогда, когда date1.toordinal() < date2.toordinal() . Сравнение даты вызывает TypeError , если другое сравнение также не является объектом date . Однако вместо этого возвращается NotImplemented , если другой компарат содержит атрибут timetuple() . Этот хук даёт возможность другим типам объектов даты реализовать сравнение смешанного типа. В противном случае, когда объект date сравнивается с объектом другого типа, возникает TypeError , если сравнение не является == или != . В последнем случае возвращается False или True соответственно.
В логических контекстах все объекты date считаются истинными.
date. replace ( year=self.year, month=self.month, day=self.day ) ¶
Возвращает дату с тем же значением, за исключением тех параметров, которым присвоены новые значения, независимо от того, какие ключевые аргументы указаны.
Часы, минуты и секунды равны 0, а флаг DST — -1.
где yday = d.toordinal() — date(d.year, 1, 1).toordinal() + 1 — номер дня в текущем году, начиная с 1 для 1 января.
Возвращает Пролептический григорианский порядковый номер даты, где у 1 января 1 года порядковый номер 1. Для любого объекта date d, date.fromordinal(d.toordinal()) == d .
Возвращает день недели как целое число, где понедельник — 0, а воскресенье — 6. Например, date(2002, 12, 4).weekday() == 2 , среда. См. также isoweekday() .
Возвращает день недели как целое число, где понедельник — 1, а воскресенье — 7. Например, date(2002, 12, 4).isoweekday() == 3 , среда. См. также weekday() , isocalendar() .
Возвращает тройку (год по ISO, номер недели по ISO, день недели по ISO).
Календарь ISO — это широко используемый вариант Григорианского календаря. [3]
Год ISO состоит из 52 или 53 полных недель, при этом неделя начинается в понедельник и заканчивается в воскресенье. Первая неделя года по ISO — это первая (по Григорианскому) календарная неделя года, содержащая четверг. Это называется неделей номер 1, и год этого четверга по ISO совпадает с его годом по Григорианскому календарю.
Например, 2004 год начинается в четверг, поэтому первая неделя 2004 года по ISO начинается в понедельник, 29 декабря 2003 года, и заканчивается в воскресенье, 4 января 2004 года:
Возвращает строку, представляющую дату в формате ISO 8601, YYYY-MM-DD :
Для даты d str(d) эквивалентно d.isoformat() .
Возвращает строку, представляющую дату:
на платформах, где встроенная функция C ctime() (которую вызывает time.ctime() , но не вызывает date.ctime() ) соответствует стандарту C.
date. strftime ( format ) ¶
Возвращает строку, представляющую дату, управляемую явной строкой формата. Коды формата, относящиеся к часам, минутам или секундам, будут иметь 0 значений. Полный список директив форматирования см. в Поведение strftime() и strptime() .
date. __format__ ( format ) ¶
То же, что и date.strftime() . Позволяет указать строку формата для объекта date в форматированных строковых литералах и при использовании str.format() . Полный список директив форматирования см. в Поведение strftime() и strptime() .
Примеры использования: date ¶
Пример подсчёта дней до события:
Ещё примеры работы с date :
Объекты datetime ¶
Объект datetime — это отдельный объект, содержащий всю информацию из объекта date и объекта time .
Подобно объекту date , datetime предполагает, что текущий Григорианский календарь расширен в обоих направлениях; как и объект time , datetime предполагает, что в каждом дне ровно 3600*24 секунды.
Аргументы year, month и day являются обязательными. tzinfo может быть None или экземпляром подкласса tzinfo . Остальные аргументы должны быть целыми числами в следующих диапазонах:
- MINYEAR <= year <= MAXYEAR ,
- 1 <= month <= 12 ,
- 1 <= day <= number of days in the given month and year ,
- 0 <= hour < 24 ,
- 0 <= minute < 60 ,
- 0 <= second < 60 ,
- 0 <= microsecond < 1000000 ,
- fold in [0, 1] .
Если указан аргумент за пределами этих диапазонов, возникает ValueError .
Добавлено в версии 3.6: Добавлен аргумент fold .
Остальные конструкторы, все методы класса:
classmethod datetime. today ( ) ¶
Возвращает текущее местное значение даты и времени с tzinfo None .
Метод функционально эквивалентен now() , но без параметра tz .
classmethod datetime. now ( tz=None ) ¶
Возвращает текущую местную дату и время.
Если необязательный аргумент tz равен None или не указан, это похоже на today() , но, если возможно, обеспечивает большую точность, чем может быть получено при использовании временной метки time.time() (например, это может быть возможно на платформах, предоставляющих функцию C gettimeofday() ).
Если tz не None , это должен быть экземпляр подкласса tzinfo , а текущая дата и время конвертируются в часовой пояс tz.
Функция предпочтительнее, чем today() и utcnow() .
classmethod datetime. utcnow ( ) ¶
Возвращает текущую дату и время в формате UTC с tzinfo None .
Походит на now() , но возвращает текущие дату и время в формате UTC в виде наивного объекта datetime . Информацию о текущей дате и времени в формате UTC можно получить, вызвав datetime.now(timezone.utc) . См. также now() .
Поскольку наивные объекты datetime обрабатываются многими методами datetime как местное время, для представления времени в формате UTC предпочтительно использовать осведомлённые даты. Таким образом, рекомендуемый способ создать объект, представляющий текущее время в формате UTC — это вызвать datetime.now(timezone.utc) .
Возвращает местную дату и время, соответствующие метке времени POSIX, например, возвращенные time.time() . Если необязательный аргумент tz равен None или не указан, метка времени преобразуется в локальные дату и время платформы, и возвращаемый объект datetime является наивным.
Если tz не None , это должен быть экземпляр подкласса tzinfo , и метка времени преобразуется в часовой пояс tz.
fromtimestamp() может вызвать OverflowError , если временная метка выходит за пределы диапазона значений, поддерживаемых функциями платформы C localtime() или gmtime() , и OSError при сбое localtime() или gmtime() . Обычно это ограничивается годами с 1970 по 2038 год. Обратите внимание, что не относящихся к POSIX системах, включающих в себя секунды координации и метки времени, секунды прыжка игнорируются fromtimestamp() , и тогда возможно иметь две метки времени, различающиеся на второй, дающей идентичные объекты datetime . Этот метод предпочтительнее utcfromtimestamp() .
Изменено в версии 3.3: Вызывает OverflowError вместо ValueError , если отметка времени выходит за пределы диапазона значений, поддерживаемых функциями платформы C localtime() или gmtime() . Вызывается OSError вместо ValueError при сбое localtime() или gmtime() .
Изменено в версии 3.6: fromtimestamp() может возвращать экземпляры с fold , установленным в 1.
Возвращает UTC datetime , соответствующий метке времени POSIX, с tzinfo None . (Получившийся объект наивен.)
Может вызвать OverflowError , если метка времени выходит за пределы диапазона значений, поддерживаемых функцией gmtime() платформы C, и OSError при сбое gmtime() . Обычно это ограничивается годами с 1970 по 2038 год.
Чтобы получить информацию об объекте datetime , вызовите fromtimestamp() :
На платформах, совместимых с POSIX, это эквивалентно следующему выражению:
за исключением последней формулы, всегда поддерживается полный диапазон лет: от MINYEAR до MAXYEAR включительно.
Поскольку наивные объекты datetime обрабатываются многими методами datetime как местное время, для представления времени в формате UTC предпочтительно использовать осведомлённые даты. Таким образом, рекомендуемый способ создать объект, представляющий метку времени в формате UTC, — это вызвать datetime.fromtimestamp(timestamp, tz=timezone.utc) .
Изменено в версии 3.3: Вызывается OverflowError вместо ValueError , если отметка времени выходит за пределы диапазона значений, поддерживаемых функцией gmtime() платформы C. Вызывается OSError вместо ValueError при сбое gmtime() .
Возвращает datetime , соответствующий Пролептическому григорианскому порядковому номеру, где 1 января 1 года имеет порядковый номер 1. ValueError не вызывается, если 1 <= ordinal <= datetime.max.toordinal() . Час, минута, секунда и микросекунда результата равны 0, а tzinfo — это None .
classmethod datetime. combine ( date, time, tzinfo=self.tzinfo ) ¶
Возвращает новый объект datetime , компоненты даты которого равны данным объектам date , а компоненты времени равны данным объектам time . Если указан аргумент tzinfo, его значение используется для установки атрибута tzinfo результата, в противном случае используется атрибут tzinfo аргумента time.
Для любого объекта d datetime , d == datetime.combine(d.date(), d.time(), d.tzinfo) . Если дата является объектом datetime , его компоненты времени и атрибуты tzinfo игнорируются.
Изменено в версии 3.6: Добавлен аргумент tzinfo.
Возвращает datetime , соответствующий date_string в одном из форматов, выдаваемых date.isoformat() и datetime.isoformat() .
В частности, функция поддерживает строки в формате:
где * может соответствовать любому одиночному символу.
Он не поддерживает парсинг произвольной ISO 8601 строки — только предназначен как обратная операция datetime.isoformat() . Более полнофункциональный ISO 8601 парсер, dateutil.parser.isoparse доступен в стороннем пакете dateutil.
Добавлено в версии 3.7.
Возвращает datetime , соответствующий календарной дате ISO, указанной с указанием года, недели и дня. Компоненты datetime, не относящиеся к дате, заполняются своими обычными значениями по умолчанию. Это функция, обратная datetime.isocalendar() .
Добавлено в версии 3.8.
Возвращает datetime , соответствующий date_string, распарсены в соответствии с format.
Вызывается ValueError , если строка date_string и format не могут быть распарсены time.strptime() или если она возвращает значение, не являющееся кортежем времени. Полный список директив форматирования см. в Поведение strftime() и strptime() .
Самый ранний из представленных datetime , datetime(MINYEAR, 1, 1, tzinfo=None) .
Последний представимый datetime , datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None) .
Наименьшее возможное различие между не равными объектами datetime , timedelta(microseconds=1) .
Атрибуты экземпляра (только для чтения):
Между MINYEAR и MAXYEAR включительно.
От 1 до 12 включительно.
От 1 до количества дней в данном месяце данного года.
Объект передан как аргумент tzinfo конструктору datetime или None , если ничего не было передано.
В [0, 1] . Используется для устранения неоднозначности настенным времени во время повторяющегося интервала. (Повторяющийся интервал происходит, когда часы откатываются в конце перехода на летнее время или когда смещение UTC для текущей зоны уменьшается по политическим причинам.) значение 0 (1) представляет собой более ранний (более поздний) из двух моментов с то же настенным изображением времени.
Добавлено в версии 3.6.
datetime2 — это длительность timedelta, удаленная из datetime1, двигающаяся вперед во времени, если timedelta.days > 0, или назад, если timedelta.days < 0. Результат имеет тот же атрибут tzinfo , что и входное datetime, и после datetime2 — datetime1 == timedelta. Вызывается OverflowError , если datetime2.year меньше MINYEAR или больше MAXYEAR . Обратите внимание, что настройки часового пояса не выполняются, даже если на входе имеется осведомлённый объект.
Вычисляет datetime2 так, чтобы datetime2 + timedelta == datetime1. Что касается сложения, результат имеет тот же атрибут tzinfo , что и входное datetime, и никакие корректировки часового пояса не выполняются, даже если входные данные осведомлённые.
Вычитание datetime из datetime определяется только в том случае, если оба операнда наивны или если оба осведомлённые. Если один осведомлён, а другой наивен, возникает TypeError .
Если оба являются наивными или оба осведомлёнными и имеют одинаковый атрибут tzinfo , атрибуты tzinfo игнорируются, и результатом является объект t timedelta , такой, как datetime2 + t == datetime1 . В этом случае настройка часового пояса не производится.
Если оба осведомлённые и имеют разные атрибуты tzinfo , a-b действует так, как если бы a и b сначала были преобразованы в наивные даты в формате UTC. Результатом является (a.replace(tzinfo=None) — a.utcoffset()) — (b.replace(tzinfo=None) — b.utcoffset()) , за исключением того, что реализация никогда не переполняется.
datetime1 считается меньшим, чем datetime2, если datetime1 предшествует datetime2 по времени.
Если одно сравнение является наивным, а другое осведомлённым, TypeError возникает при попытке сравнения порядка. Для сравнений на равенство наивные экземпляры никогда не равны осведомлённым экземплярам.
Если оба сравниваемых осведомлены и имеют один и тот же атрибут tzinfo , общий атрибут tzinfo игнорируется и сравниваются базовые даты и время. Если оба компарада осведомлены и имеют разные атрибуты tzinfo , сначала они корректируются путём вычитания их смещений UTC (полученных из self.utcoffset() ).
Изменено в версии 3.3: Сравнение равенства между осведомлёнными и наивными экземплярами datetime не вызывает TypeError .
Чтобы предотвратить откат сравнения к стандартной схеме сравнения адресов объектов, при сравнении даты и времени обычно возникает TypeError , если другое сравнение также не является объектом datetime . Однако вместо этого возвращается NotImplemented , если другой компарат имеет атрибут timetuple() . Этот хук дает возможность другим типам объектов даты реализовать сравнение смешанного типа. В противном случае, когда объект datetime сравнивается с объектом другого типа, возникает TypeError , если сравнение не является == или != . В последнем случае возвращается False или True соответственно.
Возвращает объект date с тем же годом, месяцем и днём.
Возвращает объект time с одинаковыми часами, минутами, секундами, микросекундами и кратностью. tzinfo — это None . См. также метод timetz() .
Изменено в версии 3.6: Значение кратности копируется в возвращённый объект time .
Возвращает объект time с такими же атрибутами часа, минуты, секунды, микросекунды, кратности и tzinfo. См. также метод time() .
Изменено в версии 3.6: Значение кратности копируется в возвращенный объект time .
Возвращает дату и время с теми же атрибутами, за исключением тех атрибутов, которым присвоены новые значения в зависимости от того, какие ключевые аргументы указаны. Обратите внимание, что tzinfo=None можно указать для создания наивного datetime из известного datetime без преобразования данных даты и времени.
Добавлено в версии 3.6: Добавлен аргумент fold .
Возвращает объект datetime с новым атрибутом tzinfo tz, настроив данные даты и времени так, чтобы результат был тем же временем UTC, что и self, но по местному времени tz.
Если предоставляется, tz должен быть экземпляром подкласса tzinfo , а его методы utcoffset() и dst() не должны возвращать None . Если self наивен, предполагается, что он представляет время в системном часовом поясе.
При вызове без аргументов (или с tz=None ) в качестве целевого часового пояса принимается местный часовой пояс системы. Атрибут .tzinfo преобразованного экземпляра datetime будет установлен на экземпляр timezone с именем зоны и смещением, полученными из ОС.
Если self.tzinfo равно tz, self.astimezone(tz) равно self: настройка даты или времени не выполняется. В противном случае результатом будет местное время в часовом поясе tz, представляющее то же время UTC, что и self: после astz = dt.astimezone(tz) astz — astz.utcoffset() будет иметь те же данные даты и времени, что и dt — dt.utcoffset() .
Если вы просто хотите присоединить объект часового пояса tz к datetime dt без корректировки данных даты и времени, используйте dt.replace(tzinfo=tz) . Если вы просто хотите удалить объект часового пояса из осведомлённого datetime dt без преобразования данных даты и времени, используйте dt.replace(tzinfo=None) .
Обратите внимание, что метод tzinfo.fromutc() по умолчанию можно переопределить в подклассе tzinfo , чтобы повлиять на результат, возвращаемый astimezone() . Игнорируя случаи ошибок, astimezone() действует как:
Изменено в версии 3.3: tz теперь можно пропустить.
Изменено в версии 3.6: Теперь метод astimezone() можно вызывать в наивных экземплярах, которые, как предполагается, представляют локальное время системы.
Если tzinfo — None , возвращает None , иначе возвращает self.tzinfo.utcoffset(self) и вызывает исключение, если последний не возвращает None или объект timedelta с величиной меньше одного дня.
Изменено в версии 3.7: Смещение UTC не ограничивается целым числом минут.
Если tzinfo — это None , возвращает None , иначе возвращает self.tzinfo.dst(self) и вызывает исключение, если последний не возвращает None или объект timedelta с величиной менее одного дня.
Изменено в версии 3.7: Смещение летнего времени не ограничивается целым числом минут.
Если tzinfo — None , возвращает None , иначе возвращает self.tzinfo.tzname(self) , вызывает исключение, если последний не возвращает None или строковый объект
где yday = d.toordinal() — date(d.year, 1, 1).toordinal() + 1 — номер дня в текущем году, начиная с 1 для 1 января. Флаг tm_isdst результата устанавливается в соответствии с методом dst() : tzinfo — это None или dst() возвращает None , tm_isdst — это -1 ; иначе, если dst() возвращает ненулевое значение, tm_isdst устанавливается в 1 ; иначе tm_isdst устанавливается 0 .
Если datetime экземпляр d является наивным, это то же самое, что и d.timetuple() , за исключением того, что tm_isdst принудительно устанавливается в 0 независимо от того, что возвращает d.dst() . Летнее время никогда не действует для времени UTC.
Если d известно, d нормализуется по времени UTC путём вычитания d.utcoffset() , и возвращается time.struct_time для нормализованного времени. tm_isdst принудительно устанавливается в 1. Обратите внимание, что OverflowError может быть вызвано, если d.year был MINYEAR или MAXYEAR и корректировка UTC выходит за границу года.
Поскольку наивные объекты datetime обрабатываются многими методами datetime как локальное время, для представления времени в формате UTC предпочтительно использовать осведомлённое время; в результате использование utcfromtimetuple может привести к ошибочным результатам. Если у вас есть наивный datetime , представляющий UTC, используйте datetime.replace(tzinfo=timezone.utc) , чтобы он знал, после чего вы можете использовать datetime.timetuple() .
Возвращает Пролептический григорианский порядковый номер даты. То же, что и self.date().toordinal() .
Возвращает отметку времени POSIX, соответствующую экземпляру datetime . Возвращаемое значение — float , аналогичное возвращаемому time.time() .
Предполагается, что простые экземпляры datetime представляют локальное время, и метод полагается на функцию платформы C mktime() для выполнения преобразования. Поскольку datetime поддерживает более широкий диапазон значений, чем mktime() на многих платформах, метод может вызвать OverflowError для времён, далекого прошлого или далекого будущего.
Для известных экземпляров datetime возвращаемое значение вычисляется как:
Добавлено в версии 3.3.
Изменено в версии 3.6: Метод timestamp() использует атрибут fold для устранения неоднозначности времени в течение повторяющегося интервала.
Не существует способа получить метку времени POSIX непосредственно из наивного экземпляра datetime , представляющего время в формате UTC. Если ваше приложение использует это соглашение и часовой пояс вашей системы не установлен на UTC, вы можете получить метку времени POSIX, указав tzinfo=timezone.utc :
или вычисляя метку времени напрямую:
Возвращает день недели как целое число, где понедельник равен 0, а воскресенье — 6. То же, что и self.date().weekday() . Также isoweekday() .
Возвращает день недели как целое число, где понедельник — 1, а воскресенье — 7. То же, что и self.date().isoweekday() . См. также weekday() , isocalendar() .
Возвращает тройку (год ISO, номер недели ISO, день недели ISO). То же, что и self.date().isocalendar() .
datetime. isoformat ( sep=’T’, timespec=’auto’ ) ¶
Возвращает строку, представляющую дату и время в формате ISO 8601:
- YYYY-MM-DDTHH:MM:SS.ffffff , если microsecond не равно 0 YYYY-MM-DDTHH:MM:SS , если microsecond равно 0
Если utcoffset() не возвращает None , добавляется строка с указанием смещения UTC:
- YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] , если microsecond не 0
- YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]] , если microsecond равно 0
Необязательный аргумент sep (по умолчанию ‘T’ ) — это односимвольный разделитель, помещаемый между датой и временем результата. Например:
Необязательный аргумент timespec указывает количество дополнительных компонентов времени, которые необходимо включить (по умолчанию ‘auto’ ). Может быть одним из следующих:
- ‘auto’ : то же, что ‘seconds’ , если microsecond равно 0, то же самое, что ‘microseconds’ в противном случае.
- ‘hours’ : включив hour в двузначный формат HH .
- ‘minutes’ : включив hour и minute в формате HH:MM .
- ‘seconds’ : включив hour , minute и second в формате HH:MM:SS .
- ‘milliseconds’ : включив полный рабочий день, но сократив дробную вторую часть до миллисекунд. Формат HH:MM:SS.sss .
- ‘microseconds’ : включить полный рабочий день в формате HH:MM:SS.ffffff .
Исключённые компоненты времени усекаются, а не округляются.
ValueError будет вызван из-за недопустимого аргумента timespec:
Добавлено в версии 3.6: Добавлен timespec аргумент.
Для экземпляра d datetime str(d) эквивалентно d.isoformat(‘ ‘) .
Возвращает строку, представляющую дату и время:
Строка вывода не будет включать информацию о часовом поясе, независимо от того, осведомлён ли ввод или нет.
на платформах, где встроенная функция C ctime() (которую вызывает time.ctime() , но не вызывает datetime.ctime() ) соответствует стандарту C.
datetime. strftime ( format ) ¶
Возвращает строку, представляющую дату и время, управляемую явной строкой формата. Полный список директив форматирования см. в Поведение strftime() и strptime() .
datetime. __format__ ( format ) ¶
То же, что и datetime.strftime() . Позволяет указать строку формата для объекта datetime в форматированных строковых литералах и при использовании str.format() . Полный список директив форматирования см. в Поведение strftime() и strptime() .
Примеры использования: datetime ¶
Примеры работы с объектами datetime :
В приведенном ниже примере определяется подкласс tzinfo , захватывающий информацию о часовом поясе для Кабула (Афганистан), который использовал +4 UTC до 1945 года, а затем +4:30 UTC после:
Использование KabulTz сверху:
Объекты time ¶
Объект time представляет (локальное) время дня, не зависящее от какого-либо дня и подлежащее настройке с помощью объекта tzinfo .
Все аргументы необязательны. tzinfo может быть None или экземпляром подкласса tzinfo . Остальные аргументы должны быть целыми числами в следующих диапазонах:
- 0 <= hour < 24 ,
- 0 <= minute < 60 ,
- 0 <= second < 60 ,
- 0 <= microsecond < 1000000 ,
- fold in [0, 1] .
Если указан аргумент за пределами этих диапазонов, возникает ValueError . Всё по умолчанию — 0 , кроме tzinfo, для которого по умолчанию используется None .
Самый ранний из представленных time , time(0, 0, 0, 0) .
Последний представимый time , time(23, 59, 59, 999999) .
Наименьшее возможное различие между не равными объектами time , timedelta(microseconds=1) , хотя обратите внимание, что арифметика для объектов time не поддерживается.
Атрибуты экземпляра (только для чтения):
Объект передан в качестве аргумента tzinfo конструктору time или None , если ничего не было передано.
В [0, 1] . Используется для устранения неоднозначности настенного времени во время повторяющегося интервала. (Повторяющийся интервал происходит, когда часы откатываются в конце перехода на летнее время или когда смещение UTC для текущей зоны уменьшается по политическим причинам.) Значение 0 (1) представляет собой более ранний (более поздний) из двух моментов с то же настенное изображение времени.
Добавлено в версии 3.6.
Объекты time поддерживают сравнение time с time , где a считается меньше b, когда a предшествует b во времени. Если одно сравнение является наивным, а другое осведомлённым, TypeError возникает при попытке сравнения порядка. Для сравнений на равенство наивные экземпляры никогда не равны осведомлённым экземплярам.
Если оба средства сравнения осведомлены и содержат один и тот же атрибут tzinfo , общий атрибут tzinfo игнорируется и сравниваются базовые времена. Если оба компарада осведомлены и имеют разные атрибуты tzinfo , они сначала корректируются путём вычитания их смещений по Всемирному координированному времени (получено из self.utcoffset() ). Чтобы сравнения смешанного типа не возвращались к сравнению по умолчанию по адресу объекта, когда объект time сравнивается с объектом другого типа, возникает TypeError , если сравнение не является == или != . В последнем случае возвращается False или True соответственно.
Изменено в версии 3.3: Сравнение равенства между осведомлёнными и наивными экземплярами time не вызывает TypeError .
В логических контекстах объект time всегда считается истинным.
Изменено в версии 3.5: До Python 3.5 объект time считался ложным, если он представлял полночь по Всемирному координированному времени. Такое поведение считалось непонятным и подверженным ошибкам и было удалено в Python 3.5. См. bpo-13936 для получения полной информации.
classmethod time. fromisoformat ( time_string ) ¶
Возвращает time , соответствующий time_string в одном из форматов, выдаваемых time.isoformat() . В частности, функция поддерживает строки в формате:
Не поддерживает синтаксический анализ произвольных строк ISO 8601. Он предназначен только как обратная операция time.isoformat() .
Добавлено в версии 3.7.
time. replace ( hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0 ) ¶
Возвращает time с тем же значением, за исключением тех атрибутов, которым присвоены новые значения в зависимости от того, какие ключевые аргументы указаны. Обратите внимание, что tzinfo=None можно указать для создания наивного time из осведомлённого time без преобразования данных времени.
Добавлено в версии 3.6: Добавлен аргумент fold .
Возвращает строку, представляющую время в формате ISO 8601, одно из значений:
- HH:MM:SS.ffffff , если microsecond не равно 0,
- HH:MM:SS , если microsecond равно 0,
- HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] , если utcoffset() не возвращает None ,
- HH:MM:SS+HH:MM[:SS[.ffffff]] , если microsecond равно 0, а utcoffset() не возвращает None
Необязательный аргумент timespec указывает количество дополнительных компонентов времени, которые необходимо включить (по умолчанию ‘auto’ ). Может быть одно из следующих:
- ‘auto’ : то же, что ‘seconds’ , если microsecond равно 0, то же самое, что ‘microseconds’ в противном случае.
- ‘hours’ : включите hour в двузначном формате HH .
- ‘minutes’ : включить hour и minute в формате HH:MM .
- ‘seconds’ : включить hour , minute и second в формате HH:MM:SS .
- ‘milliseconds’ : включить полный рабочий день, но сократить дробную вторую часть до миллисекунд. Формат HH:MM:SS.sss .
- ‘microseconds’ : включить полный рабочий день в формате HH:MM:SS.ffffff .
Исключенные компоненты времени усекаются, а не округляются.
ValueError будет вызван из-за недопустимого аргумента timespec.
Добавлено в версии 3.6: Добавлен аргумент timespec.
Для времени t str(t) эквивалентен t.isoformat() .
time. strftime ( format ) ¶
Возвращает строку, представляющую время, управляемую явной строкой формата. Полный список директив форматирования см. в Поведение strftime() и strptime() .
time. __format__ ( format ) ¶
То же, что и time.strftime() . Позволяет указать строку формата для объекта time в форматированных строковых литералах и при использовании str.format() . Полный список директив форматирования см. в Поведение strftime() и strptime() .
Если tzinfo — None , возвращает None , иначе возвращает self.tzinfo.utcoffset(None) и вызывает исключение, если последний не возвращает None или объект timedelta с величиной менее одного дня.
Изменено в версии 3.7: Смещение UTC не ограничивается целым числом минут.
Если tzinfo — None , возвращает None , иначе возвращает self.tzinfo.dst(None) и вызывает исключение, если последний не возвращает None или объект timedelta с величиной меньше одного дня.
Изменено в версии 3.7: Смещение летнего времени не ограничивается целым числом минут.
Если tzinfo — None , возвращает None , иначе возвращает self.tzinfo.tzname(None) или вызывает исключение, если последний не возвращает None или строковый объект.
Примеры использования: time ¶
Примеры работы с объектом time :
Объекты tzinfo ¶
Абстрактный базовый класс, что означает, что этот класс не должен создаваться напрямую. Определите подкласс tzinfo для сбора информации о часовом поясе.
Экземпляр (подкласс) tzinfo может быть передан конструкторам для объектов datetime и time . Последние объекты рассматривают свои атрибуты как находящиеся в локальном времени, а объект tzinfo поддерживает методы, показывающие смещение местного времени от UTC, имя часового пояса и смещение летнего времени, все относительно переданного им объекта даты или времени.
Вам необходимо создать подкласс и (по крайней мере) предоставить реализации стандартных методов tzinfo , необходимых для используемых вами методов datetime . Модуль datetime предоставляет timezone , простой подкласс tzinfo , который может представлять часовые пояса с фиксированным смещением от UTC (например, сам UTC или Североамериканское EST и EDT).
Особое требование для пиклинга: подкласс tzinfo должен содержать метод __init__() , который может вызываться без аргументов, в противном случае он может быть пиклен (pickled), но, возможно, не будет снова распиклен (unpickled). Это техническое требование, которое может быть ослаблено в будущем.
В подклассе tzinfo может потребоваться реализация следующих методов. Какие именно методы необходимы, зависит от того, как используются известные объекты datetime . Если сомневаетесь, просто реализуйте их все.
tzinfo. utcoffset ( dt ) ¶
Возвращает смещение местного времени от UTC в виде объекта timedelta , положительного к востоку от UTC. Если местное время находится к западу от UTC, оно должно быть отрицательным.
Представляет собой полное смещение от UTC; например, если объект tzinfo представляет настройки часового пояса и летнего времени, utcoffset() должен вернуть их сумму. Если смещение UTC неизвестно, вернёт None . В противном случае возвращаемое значение должно быть объектом timedelta строго между -timedelta(hours=24) и timedelta(hours=24) (величина смещения должна быть меньше одного дня). Большинство реализаций utcoffset() , вероятно, будут выглядеть как одна из этих двух:
Если utcoffset() не возвращает None , dst() также не должен возвращать None .
Изменено в версии 3.7: Смещение UTC не ограничивается целым числом минут.
Возвращает настройку перехода на летнее время (DST) в виде объекта timedelta или None , если информация о летнем времени неизвестна.
Возвращает timedelta(0) , если DST не действует. Если действует DST, вернёт смещение как объект timedelta (подробности см. в utcoffset() ). Обратите внимание, что смещение DST, если применимо, уже было добавлено к смещению UTC, возвращаемому utcoffset() , поэтому нет необходимости консультироваться с dst() , если вы не заинтересованы в получении информации о DST отдельно. Например, datetime.timetuple() вызывает метод dst() своего атрибута tzinfo , чтобы определить, как должен быть установлен флаг tm_isdst , а tzinfo.fromutc() вызывает dst() для учёта изменений DST при пересечении часовых поясов.
Экземпляр tz подкласса tzinfo , который моделирует как стандартное, так и дневное время, должен быть согласован в этом смысле:
должен возвращать тот же результат для каждого datetime dt с dt.tzinfo == tz . Для нормальных подклассов tzinfo это выражение дает «стандартное смещение» часового пояса, которое не должно зависеть от даты или времени, а только от географического положения. Реализация datetime.astimezone() полагается на это, но не может обнаруживать нарушения; ответственность за это несёт программист. Если подкласс tzinfo не может гарантировать этого, он может переопределить реализацию по умолчанию tzinfo.fromutc() в любом случае для правильной работы с astimezone() .
Большинство реализаций dst() , вероятно, будут выглядеть как одна из этих двух:
Реализация по умолчанию dst() вызывает NotImplementedError .
Изменено в версии 3.7: Смещение DST не ограничивается целым числом минут.
Возвращает имя часового пояса, соответствующее объекту dt datetime , в виде строки. Модуль datetime ничего не определяет в именах строк и не требует, чтобы они что-либо означали. Например, «GMT», «UTC», «-500», «-5: 00», «EDT», «US/Eastern», «America/New York» являются действительными ответами. Возвращает None , если имя строки неизвестно. Обратите внимание, что это метод, а не фиксированная строка, прежде всего потому, что некоторые подклассы tzinfo захотят возвращать разные имена в зависимости от переданного значения dt, особенно если класс tzinfo учитывает дневное время.
Реализация по умолчанию tzname() вызывает NotImplementedError .
Методы вызываются объектом datetime или time в ответ на их методы с такими же именами. Объект datetime передаёт себя в качестве аргумента, а объект time передаёт None в качестве аргумента. Поэтому методы подкласса tzinfo должны быть готовы принять аргумент dt None или класса datetime .
Когда передан None , разработчик класса должен выбрать лучший ответ. Например, возвращение None подходит, если класс хочет сказать, что объекты времени не участвуют в протоколах tzinfo . Для utcoffset(None) может быть более полезно возвращать стандартное смещение UTC, поскольку другого соглашения для определения стандартного смещения нет.
Когда объект datetime передаётся в ответ на метод datetime , dt.tzinfo является тем же объектом, что и self. Методы tzinfo могут полагаться на это, если пользовательский код не вызывает методы tzinfo напрямую. Намерение состоит в том, чтобы методы tzinfo интерпретировали dt как находящееся в местном времени и не беспокоились об объектах в других часовых поясах.
Есть ещё один метод tzinfo , который подкласс может захотеть переопределить:
tzinfo. fromutc ( dt ) ¶
Вызывается из реализации по умолчанию datetime.astimezone() . При вызове из него dt.tzinfo является self, а данные даты и времени dt следует рассматривать как выражение времени UTC. Цель fromutc() — настроить данные даты и времени, возвращая эквивалентное datetime в self локальном времени.
У большинства подклассов tzinfo должна быть возможность без проблем наследовать реализацию fromutc() по умолчанию. Он достаточно силён для обработки часовых поясов с фиксированным смещением и часовых поясов, учитывающих как стандартное, так и летнее время, и последнее, даже если время перехода на летнее время отличается в разные годы. Примером часового пояса, который реализация fromutc() по умолчанию может не обрабатывать правильно во всех случаях, является тот, где стандартное смещение (от UTC) зависит от прошедшей даты и времени, что может произойти по политическим причинам. Реализации по умолчанию astimezone() и fromutc() могут не дать желаемого результата, если результатом является один из часов, охватывающих момент изменения стандартного смещения.
Пропуская код для случаев ошибки, реализация fromutc() по умолчанию действует как:
В следующем файле tzinfo_examples.py есть несколько примеров классов tzinfo :
Обратите внимание, что два раза в год в подклассе tzinfo есть неизбежные тонкости, учитывающие как стандартное, так и летнее время в точках перехода на DST. Например, рассмотрим восточное время США (UTC -0500), где EDT начинается через минуту после 1:59 (EST) во второе воскресенье марта и заканчивается через минуту после 1:59 (EDT) в первое воскресенье ноября:
Когда начинается DST («стартовая» линия), местные настенные часы перескакивают с 1:59 на 3:00. Настенное время в форме 2:MM не имеет смысла в этот день, поэтому astimezone(Eastern) не вернет результата с hour == 2 в день перехода на DST (летнее время). Например, при весеннем форвардном переходе 2016 года мы получаем:
Когда заканчивается DST («конечная» линия), возникает потенциально более серьезная проблема: есть час, который нельзя однозначно описать в локальном настенном времени: последний час дневного времени. На востоке это время в форме 5:MM UTC в конце светового дня. Локальные настенные часы снова перескакивают с 1:59 (дневное время) на 1:00 (стандартное время). Местное время формы 1:MM неоднозначно. astimezone() имитирует поведение местных часов, отображая два соседних часа UTC в один и тот же местный час. В восточном примере время UTC в форме 5:MM и 6:MM сопоставляется с 1:MM при преобразовании в восточное время, но более раннее время содержит атрибут fold , установленный на 0, а более поздние времена — на 1. Например, при переходе на осень 2016 года мы получаем:
Обратите внимание, что экземпляры datetime , которые отличаются только значением атрибута fold , при сравнении считаются равными.
Приложения, которые не могут переносить неоднозначности настенного времени, должны явно проверять значение атрибута fold или избегать использования гибридных подклассов tzinfo ; нет двусмысленностей при использовании timezone или любого другого подкласса tzinfo с фиксированным смещением (например, класса, представляющего только EST (фиксированное смещение -5 часов) или только EDT (фиксированное смещение -4 часа)).
У модуля datetime есть базовый класс timezone (для обработки произвольных фиксированных смещений от UTC) и его timezone.utc атрибут (экземпляр часового пояса UTC).
Библиотека dateutil.tz выводит IANA базу данных часовых поясов (также известную как база данных Olson) в Python, и рекомендуется его использование.
IANA база данных часовых поясов База данных часовых поясов (часто называемая tz, tzdata или zoneinfo) содержит код и данные, представляющие историю локальная времени для многих репрезентативных местоположений по всему миру. Он периодически обновляется для отражения изменений, внесенных политическими органами в границы часового пояса, смещения UTC и правила перехода на летнее время.
Объекты timezone ¶
Класс timezone является подклассом tzinfo , каждый экземпляр которого представляет часовой пояс, определенный фиксированным смещением от UTC.
Объекты этого класса не могут использоваться для представления информации о часовом поясе в местах, где используются разные смещения в разные дни года или где исторические изменения были внесены в гражданское время.
class datetime. timezone ( offset, name=None ) ¶
Аргумент offset должен быть указан как объект timedelta , представляющий разницу между местным временем и временем в формате UTC. Он должен находиться строго между -timedelta(hours=24) и timedelta(hours=24) , в противном случае будет вызвано ValueError .
Аргумент name не является обязательным. Если указано, это должна быть строка, которая будет использоваться в качестве значения, возвращаемого методом datetime.tzname() .
Добавлено в версии 3.2.
Изменено в версии 3.7: Смещение UTC не ограничивается целым числом минут.
Возвращает фиксированное значение, указанное при создании экземпляра timezone .
Аргумент dt игнорируется. Возвращаемое значение — экземпляр timedelta , равный разнице между местным временем и временем в формате UTC.
Изменено в версии 3.7: Смещение UTC не ограничивается целым числом минут.
Возвращает фиксированное значение, указанное при создании экземпляра timezone .
Если name не указано в конструкторе, имя, возвращаемое tzname(dt) , создается из значения offset следующим образом. Если offset — timedelta(0) , имя — «UTC», в противном случае это строка в формате UTC±HH:MM , где ± — знак offset , HH и MM — две цифры offset.hours и offset.minutes соответственно.
Изменено в версии 3.6: Имя, созданное из offset=timedelta(0) , теперь представляет собой обычное «UTC», а не ‘UTC+00:00’ .
Всегда возвращает None .
timezone. fromutc ( dt ) ¶
Возвращает dt + offset . Аргумент dt должен быть осведомлённым экземпляром datetime с tzinfo , установленным на self .
Часовой пояс UTC: timezone(timedelta(0)) .
Поведение strftime() и strptime() ¶
Все объекты date , datetime и time поддерживают метод strftime(format) для создания строки, представляющей время, под контролем явной строки формата.
И наоборот, метод класса datetime.strptime() создаёт объект datetime из строки, представляющей дату и время, и соответствующей строки формата.
В таблице ниже представлено общее сравнение strftime() и strptime() :
| strftime | strptime | |
|---|---|---|
| Использование | Преобразовать объект в строку в соответствии с заданным форматом | Парсинг строки в объект datetime , учитывая соответствующий формат |
| Тип метода | Метод экземпляра | Метод класса |
| Метод из | date ; datetime ; time | datetime |
| Сигнатура | strftime(format) | strptime(date_string, format) |
Коды форматов strftime() и strptime() ¶
Ниже приведен список всех кодов формата, которые требуются стандарту C 1989 года, и они работают на всех платформах со стандартной реализацией C.