Как округлить таймделту по секундам? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь получить измерение времени моего скрипта в формате HH:MM:SS. datetime.timedelta не имеет функции strftime. Я хочу избавиться от микросекундной индикации. duration - это timedelta объект.

import datetime

start = datetime.datetime.now()

for i in range(100000000):
    pass

end = datetime.datetime.now()

duration = end - start

print(duration)

Вывод:

0:00:03.474106

Но мне нужно:

0:00:04

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Если вы просто хотите избавиться от доли миллисекунды продолжительности, вы можете использовать деление по полу на миллион, а затем умножить его обратно на миллион:

print(duration // 1000000 * 1000000)

Вы также можете создать новый timedelta объект из duration без указанного атрибута milliseconds.

print(datetime.timedelta(duration.days, duration.seconds))

Но если вы хотите, чтобы он всегда округлялся вместо этого, как предполагает ожидаемый вывод 0:00:04, вы можете получить количество секунд от объекта timedelta путем вызова методов total_seconds, используйте math.ceil для округления, а затем создайте новый объект timedelta с ним:

import math
print(datetime.timedelta(seconds=math.ceil(duration.total_seconds())))
0 голосов
/ 01 апреля 2020

мы берем длительность (объект timedelta) и за вычетом собственных микросекунд, затем сохраняем ее в переменной длительности.

import datetime

start = datetime.datetime.now()

for i in range(100000000):
    pass

end = datetime.datetime.now()

# duration = 0:00:03:962227
duration = end - start

# duration = 0:00:03:962227 - 0:00:00.962227
duration = duration - datetime.timedelta(microseconds=duration.microseconds)
# duration is now = 0:00:03

print(duration)

больше информации о тимдельте и ее аргументах можно найти по адресу https://docs.python.org/3/library/datetime.html#datetime .timedelta

...