Подтвердить что ты не робот

Как удалить микросекунды из объекта timedelta?

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

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
4b9b3361

Ответ 1

Возьмите timedetla и удалите свои собственные микросекунды, как микросекунды и атрибут только для чтения:

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
avg = avg - datetime.timedelta(microseconds=avg.microseconds)

Вы можете сделать свою собственную небольшую функцию, если это повторяющаяся потребность:

import datetime

def chop_microseconds(delta):
    return delta - datetime.timedelta(microseconds=delta.microseconds)

Я не нашел лучшего решения.

Ответ 2

Если это только для дисплея, эта идея работает:

avgString = str(avg).split(".")[0]

Идея состоит в том, чтобы взять только то, что находится перед точкой. Он вернет 01:23:45 для 01: 23: 45.1235

Ответ 3

другой вариант, учитывая timedetla, вы можете сделать:

avg = datetime.timedelta(seconds=math.ceil(avg.total_seconds()))

Вы можете заменить math.ceil() на math.round() или math.floor(), в зависимости от ситуации.

Ответ 4

Вы можете изменить элементы данных как таковые:

In [1]: datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
Out[1]: datetime.datetime(2017, 4, 28, 0, 0)

Ответ 5

Я нашел, что это работает для меня:

start_time = datetime.now()
some_work()
end time = datetime.now()
print str(end_time - start_time)[:-3]

Выход:

0:00:01.955

Я думал об этом после поиска в https://docs.python.org/3.2/library/datetime.html#timedelta-objects

Надеюсь это поможет!