I do a calculation of average time, and I would like to display the resulted average without microseconds.
avg = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)
I do a calculation of average time, and I would like to display the resulted average without microseconds.
avg = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)
Take the timedelta and remove its own microseconds, as microseconds and read-only attribute:
avg = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)
avg = avg - datetime.timedelta(microseconds=avg.microseconds)
You can make your own little function if it is a recurring need:
import datetime
def chop_microseconds(delta):
return delta - datetime.timedelta(microseconds=delta.microseconds)
I have not found a better solution.
If it is just for the display, this idea works :
avgString = str(avg).split(".")[0]
The idea is to take only what is before the point. It will return 01:23:45 for 01:23:45.1235
Take the timedelta and remove its own microseconds, as microseconds and read-only attribute:
avg = sum(timedeltas, datetime.timedelta(0)) / len(timedeltas)
avg = avg - datetime.timedelta(microseconds=avg.microseconds)
You can make your own little function if it is a recurring need:
import datetime
def chop_microseconds(delta):
return delta - datetime.timedelta(microseconds=delta.microseconds)
I have not found a better solution.
another option, given timedelta you can do:
avg = datetime.timedelta(seconds=math.ceil(avg.total_seconds()))
You can replace the math.ceil()
, with math.round()
or math.floor()
, depending on the situation.
Given that timedelta only stores days, seconds and microseconds internally, you can construct a new timedelta without microseconds:
from datetime import timedelta
timedeltas = [
timedelta(hours=1, minutes=5, seconds=30, microseconds=9999),
timedelta(minutes=35, seconds=17, microseconds=55),
timedelta(hours=2, minutes=17, seconds=3, microseconds=1234),
]
avg = sum(timedeltas, timedelta(0)) / len(timedeltas) # timedelta(0, 4756, 670429)
avg = timedelta(days=avg.days, seconds=avg.seconds) # timedelta(0, 4756)
I think this is the best way to get the last minutes without microseconds:
import time
import datetime
NOW = datetime.datetime.now()
LASTMINUTE = NOW - datetime.timedelta(minutes=1, seconds = NOW.second, microseconds = NOW.microsecond)
The answer by Hobbestigrou is okay but it doesn't round. If you want one that leverages pandas.Timedelta.round
, here it is:
import datetime
import pandas as pd
td = datetime.timedelta(hours=1, minutes=23, seconds=45, microseconds=678901)
print(td, repr(td))
1:23:45.678901 datetime.timedelta(seconds=5025, microseconds=678901)
td2 = pd.Timedelta(td).round('s').to_pytimedelta()
print(td2, repr(td2))
1:23:46 datetime.timedelta(seconds=5026)
Similarly, if you would prefer to floor instead, there is pandas.Timedelta.floor
.
I found this to work for me:
start_time = datetime.now()
some_work()
end time = datetime.now()
print str(end_time - start_time)[:-3]
Output:
0:00:01.955
I thought about this after searching in https://docs.python.org/3.2/library/datetime.html#timedelta-objects
© 2022 - 2024 — McMap. All rights reserved.
avg.strftime("%Y-%m-%d %H:%M:%S")
, but it will return string. – Parliamentarydatetimes
totimedeltas
, as I agree that it is meant to be a list of timedeltas – Charity