Сообщить об ошибке.

Класс time() модуля datetime в Python.

Создание объекта времени datetime.time().

Синтаксис:

import datetime

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

Параметры:

Все аргументы необязательны. Аргумент tzinfo может быть None или экземпляром подкласса datetime.tzinfo. Остальные аргументы должны быть целыми числами в следующих диапазонах:

  • hour=0 - час в пределах 0 <= hour < 24,
  • minute=0 - минута в пределах 0 <= minute < 60,
  • second=0 - секунда в пределах 0 <= second < 60,
  • microsecond=0 - микросекунда в пределах 0 <= microsecond < 60,
  • tzinfo=None - может быть None или экземпляром подкласса datetime.tzinfo. Так же смотрите модуль zoneinfo (добавлен в Python 3.9) - конкретная реализация часового пояса для поддержки базы данных часовых поясов IANA,
  • fold=0 - 0 или 1.

Если задан аргумент вне этих диапазонов, вызывается исключение ValueError. Все аргументы по умолчанию 0, кроме tzinfo, который по умолчанию None.

Возвращаемое значение:

  • объект даты и времени datetime.time().

Описание:

Класс time() модуля datetime представляет собой (локальное) время, независимое от какого-либо конкретного дня и подлежащее настройке с помощью объекта datetime.tzinfo() (смотрите так же модуль zoneinfo - добавлен в Python 3.9).

Объекты datetime.time() поддерживают сравнение. Объект time1 считается меньше, чем объект time2, когда time1 предшествует во времени time2.

  • При сравнении объекта time1 c параметром tzinfo не равным None с объектом time2, у которого параметр tzinfo=None, вызывается исключение TypeError.
  • При сравнений на равенство объект time1 c параметром tzinfo не равным None никогда не будут равен объекту time2, у которого параметр tzinfo=None.
  • Если оба объекта datetime.time() имеют параметр tzinfo не равным None и имеют один и тот же атрибут tzinfo, то общий атрибут tzinfo игнорируется, и сравнивается базовое время.
  • Если оба объекта datetime.time() имеют параметр tzinfo не равным None и имеют разные атрибуты tzinfo, сопоставления сначала корректируются путем вычитания их смещений UTC, полученных из self.utcoffset().

Атрибуты экземпляра класса datetime.time(), доступны только для чтения:

  • time.hour - возвращает часы в диапазоне range(24),
  • time.minute - возвращает минуты в диапазоне range(60),
  • time.second - возвращает секунды в диапазоне range(60),
  • time.microsecond - возвращает микросекунды в диапазоне range(1000000).
  • time.tzinfo - возвращает объект, переданный в качестве аргумента tzinfo или None.
  • time.fold - возвращает зимнее 0 или летнее 1 время. Используется для устранения неоднозначности времени в момент перехода с зимнего на летнее время и обратно, когда смещение UTC для текущей зоны уменьшается или увеличивается.
>>> import datetime
>>> time = datetime.time(22, 45, 15)
>>> time
# datetime.time(22, 45, 15)
>>> print(time.hour, time.minute, time.second, time.microsecond)
# 22 45 15 0

Создание объекта datetime.time() из строки ISO 8601:

datetime.time.fromisoformat(time_string):

Метод datetime.time.fromisoformat() возвращает datetime.time(), который соответствует строке time_string в одном из форматов, возвращаемых методом time.isoformat().

Внимание! Метод не поддерживает разбор произвольных строк ISO 8601. Он предназначен только как обратная операция time.isoformat().

>>> from datetime import time
>>> time.fromisoformat('04:23:01')
# datetime.time(4, 23, 1)
>>> time.fromisoformat('04:23:01.000384')
# datetime.time(4, 23, 1, 384)
>>> time.fromisoformat('04:23:01+04:00')
# datetime.time(4, 23, 1, \
# tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

Методы объекта time():


time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0):

Метод time.replace() возвращает datetime.time() с тем же значением, за исключением тех атрибутов, которым даны новые значения в зависимости от того, какие ключевые аргументы указаны. Обратите внимание, что для создания "наивного" datetime.time() из "осведомленного" без преобразования данных времени необходимо задать tzinfo=None.

time.isoformat(timespec='auto'):

Метод time.isoformat() возвращает строку, представляющую время в формате ISO 8601:

  • HH:MM:SS.ffffff, если микросекунда не равна 0,
  • HH:MM:SS, если микросекунда равна 0,
  • HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]], если метод time.utcoffset() не возвращает None,
  • HH:MM:SS+HH:MM[:SS[.ffffff]], если микросекунда равна 0 и метод time.utcoffset() не возвращает None.

Необязательный аргумент timespec указывает количество дополнительных компонентов времени, по умолчанию 'auto'.

Аргумент timespec может быть один из следующих значений:

  • 'auto': то же, что и 'seconds' если time.microseconds равна 0, в противном случае как 'microseconds'.
  • 'hours': включает час в двузначном формате HH.
  • 'minutes': включает час и минуты в формате HH:MM.
  • 'seconds': включает час , минуты и секунды в формате HH:MM:SS.
  • 'milliseconds': включает полный вариант вывода, но усекает вторую дробную часть до миллисекунд - HH:MM:SS.sss.
  • 'microseconds': включает полный вариант вывода - HH:MM:SS.ffffff.Note Excluded time components are truncated, not rounded.

Примечание. Компоненты исключенного времени будут отброшены, а не округлены.

Будет вызвано исключение ValueError, если аргумент timespec будет недопустимым.

>>> import datetime
>>> time = datetime.time(hour=12, minute=34, second=56, microsecond=123456)
>>> time.isoformat(timespec='minutes')
# '12:34'
>>> time = datetime.time(hour=12, minute=34, second=56, microsecond=0)
>>> time.isoformat(timespec='microseconds')
# '12:34:56.000000'
>>> time.isoformat(timespec='auto')
# '12:34:56'

time.__str__():

Для экземпляра time справедливо утверждение: str(time) эквивалентно вызову time.isoformat(timespec=' ').

>>> import datetime
>>> dt = datetime.datetime.now()
>>> time = dt.time()
>>> time
# datetime.time(17, 26, 46, 552992)
>>> time.__str__()
# '17:26:46.552992'
>>> str(time)
# '17:26:46.552992'
>>> time.isoformat()
# '17:26:46.552992'

time.strftime(format):

Метод time.strftime() возвращает строку, представляющую время, управляемую явной строкой формата.

Полный список директив форматирования смотрите в разделе "Поведение методов strftime() и strptime() модуля datetime".

>>> import datetime
>>> dt = datetime.datetime.now()
>>> time = dt.time()
>>> time.strftime('%H:%M:%S')
# '17:26:46'
>>> time.strftime('%H часов %M минут %S секунд')
# '17 часов 26 минут 46 секунд'
>>> time.strftime('%H:%M')
# '17:26'

time.utcoffset():

Если tzinfo равен None, то метод time.utcoffset() возвращает None, иначе возвращает self.tzinfo.utcoffset(None) или вызывает исключение, если последний не возвращает None или объект timedelta со значением менее одного дня.

>>> import datetime
>>> dt = datetime.datetime.now()
>>> time = dt.time()
>>> print(time.utcoffset())
# None

time.dst():

Если tzinfo равен None, то метод time.dst() возвращает None, иначе возвращает self.tzinfo.dst(None) или вызывает исключение, если последнее выражение не возвращает None или объект timedelta со значением менее одного дня.

>>> import datetime
>>> dt = datetime.datetime.now()
>>> time = dt.time()
>>> print(time.dst())
# None

time.tzname():

Если tzinfo равен None, то метод time.tzname() возвращает None, иначе возвращает self.tzinfo.tzname(None) или вызывает исключение, если последний не возвращает None или строковый объект.

>>> import datetime
>>> dt = datetime.datetime.now()
>>> time = dt.time()
>>> print(time.tzname())
# None

Примеры работы с объектом datetime.time():

>>> from datetime import time, tzinfo, timedelta
>>> class TZ1(tzinfo):
...     def utcoffset(self, dt):
...         return timedelta(hours=1)
...     def dst(self, dt):
...         return timedelta(0)
...     def tzname(self,dt):
...         return "+01:00"
...     def  __repr__(self):
...         return f"{self.__class__.__name__}()"
...
>>> t = time(12, 10, 30, tzinfo=TZ1())
>>> t
# datetime.time(12, 10, 30, tzinfo=TZ1())
>>> t.isoformat()
# '12:10:30+01:00'
>>> t.dst()
# datetime.timedelta(0)
>>> t.tzname()
# '+01:00'
>>> t.strftime("%H:%M:%S %Z")
# '12:10:30 +01:00'
>>> 'The {} is {:%H:%M}.'.format("time", t)
# 'The time is 12:10.