Как удалить микросекунды из объекта timedelta?
Я делаю расчет среднего времени, и я хотел бы отобразить полученное среднее без микросекунд.
avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
Ответы
Ответ 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
Надеюсь это поможет!