Класс timedelta() модуля datetime
Интервал времени timedelta, поддерживаемые операции.
Синтаксис:
Параметры:
Все аргументы являются необязательными и по умолчанию равны 0. Аргументы могут быть целыми числами или числами с плавающей запятой и могут быть положительными или отрицательными.
days=0
- день,seconds=0
- секунды,microseconds=0
- микросекунды,milliseconds=0
- миллисекунды,minutes=0
- минуты,hours=0
- часы,weeks=0
- недели.
Возвращаемое значение:
Описание:
Класс timedelta()
модуля datetime
представляет собой продолжительность, разницу между двумя датами или временем.
Экземпляр datetime.timedelta
продолжительность хранит как сочетание days
, seconds
и microseconds
, а остальные переданные в конструктор аргументы конвертируются в эти единицы:
millisecond
преобразуется в 1000microseconds
.minute
преобразуется в 60seconds
.hour
преобразуется в 3600seconds
.week
преобразуется в 7days
.
days
, seconds
и microseconds
затем нормализуются так, чтобы представление было уникальным:
0 <=
microseconds
< 10000000 <=
seconds
< 3600*24 (количество секунд в одном дне)-999999999 <=
days
<= 999999999
В следующем примере показано, как любые аргументы, кроме days
, seconds
и microseconds
объединяются и нормализуются в эти три результирующих атрибута:
Если какой-либо аргумент представляет собой число float
и есть дробные микросекунды и микросекунды, оставшиеся от всех аргументов, то они объединяются, а их сумма округляется до ближайшей микросекунды с использованием прерывателя с округлением от половины до четности. Если аргумент не является float
, то процессы преобразования и нормализации являются точными, информация не теряется.
Если нормализованное значение дней находится за пределами диапазона -999999999 <= days <= 999999999
, то появляется исключение OverflowError
.
Обратите внимание, что нормализация отрицательных значений может сначала удивить. Например:
Продолжительность timedelta
имеет 1 метод:
timedelta
имеет 1 метод:delta.total_seconds()
:
Метод timedelta.total_seconds()
возвращает общее количество секунд, содержащихся в продолжительности timedelta
. Эквивалент td/timedelta(seconds=1)
.
Для интервальных единиц, отличных от секунд, используйте форму деления напрямую, например td/timedelta(microseconds=1)
.
Обратите внимание, что для очень больших временных интервалов более 270 лет на большинстве платформ этот метод теряет микросекундную точность.
Поддерживаемые операции timedelta
:
timedelta
:t1 = t2 + t3
Сумма t2 и t3. Впоследствии t1-t2 == t3 и t1-t3 == t2 верны.
(1)
t1 = t2 - t3
Разница t2 и t3. Впоследствии t1 == t2 - t3 и t2 == t1 + t3 верны.
(1)(6)
t1 = t2 * i t1 = i * t2
Дельта умножается на целое число 'int'. Впоследствии t1 // i == t2 верно, если i! = 0.
В общем случае t1 * i == t1 * (i-1) + t1 верно.
(1)
t1 = t2 * f t1 = f * t2
Дельта умножается на 'float'. Результат округляется до ближайшего кратного 'timedelta.resolution' с использованием округления от половины до четности.
f = t2 / t3
Деление общей длительности 't2' на интервал 't3'. Возвращает объект 'float'.
(3)
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 и r = t1% t2. 'q' представляет собой целое число, а 'r' представляет собой объект 'datetime.timedelta'.
(3)
+t1
Возвращает объект 'datetime.timedelta' с тем же значением.
(2)
-t1
Эквивалентно datetime.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)
Возвращает строковое представление объекта 'datetime.timedelta' в виде вызова конструктора со значениями канонического атрибута.
Замечания:
Это точно, но может быть переполнение.
Это точно и не может быть переполнения.
Деление на 0 поднимает исключение
ZeroDivisionError
.-timedelta.max
не может быть представлен как объектdatetime.timedelta
.Строковые представления объектов
datetime.timedelta
нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательныхtimedeltas
.Например:Выражение
t2 - t3
всегда будет равно выражениюt2 + (-t3)
, кроме случаев, когдаt3
равноtimedelta.max
. В этом случае первое даст результат, а второе вызовет переполнение.
В дополнение к операциям, перечисленным выше, объекты datetime.timedelta
поддерживают определенные дополнения и вычитания с объектами date
и datetime
. Смотрите "Частые приемы работы c datetime.timedelta
".
Поддерживаются сравнения объектов datetime.timedelta
с некоторыми оговорками.
Сравнения ==
или !=
всегда возвращают bool
, независимо от типа сравниваемого объекта:
Для всех других сравнений, таких <
как >
и когда объект timedelta
сравнивается с объектом другого типа, вызывается исключение TypeError
:
В булевых контекстах объект timedelta
считается истинным тогда и только тогда, когда он не равен datetime.timedelta(0)
.
Дополнительный пример нормализации:
Last updated