How do I remove the microseconds from a timedelta object?

Question:

I do a calculation of average time, and I would like to display the resulted average without microseconds.

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
Asked By: Hobbestigrou

||

Answers:

Take the timedelta and remove its own microseconds, as microseconds and read-only attribute:

avg = sum(datetimes, datetime.timedelta(0)) / len(datetimes)
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.

Answered By: Hobbestigrou

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

Answered By: sangorys

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.

Answered By: eran

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

Hope this helps!

Answered By: Eitan.k.

Given that timedelta only stores days, seconds and microseconds internally, you can construct a new timedelta without microseconds:

from datetime import timedelta
datetimes = (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(datetimes, timedelta(0)) / len(datetimes) # timedelta(0, 4756, 670429)
avg = timedelta(days=avg.days, seconds=avg.seconds) # timedelta(0, 4756)
Answered By: ldav1s
c -= timedelta(microseconds=c.microseconds)
Answered By: Rafal

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)
Answered By: Kris Lukacs
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.