简体   繁体   中英

Python - difference between time

Looking for easiest way to calculate the difference between 2 python times and display the millisecond delta

I have 2 times

startTime = datetime.datetime.now().time()

do some stuff...

endTime= datetime.datetime.now().time()

This works fine and when I log the times out and I get something like this in my logs...

RequestStartTime = 08:56:19.188999

ResponseTime = 08:56:19.905999

When I try to simply subtract them like this

delta = endTime - startTime

I get the following error

unsupported operand type(s) for -: 'time' and 'time'

All I want to do is show the difference in microseconds and I can't figure it out

I want to show is 717000 ms

If you just use the result of now() , and don't convert them to time s, you can take the difference & extract the bits you want in the form you want; for example:

startTime = datetime.datetime.now()
endTime= datetime.datetime.now()
delta = endTime - startTime
print str(delta).split(":")[2]

Try this:

from datetime import datetime, date

datetime.combine(date.today(), endTime) - datetime.combine(date.today(), startTime)

Hope this Helps.

To measure the difference manually, you should use time.monotonic() instead.

If you don't care about leap seconds (~1s error once per year and a half) and you need to display the local time:

#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone

start = datetime.now(timezone.utc).astimezone() # current local time
# print("RequestStartTime = %s" % start.time())
end = datetime.now(timezone.utc).astimezone()
diff_milliseconds = (end - start) / timedelta(milliseconds=1)
print("%.0f ms" % diff_milliseconds)

The code works fine around/during DST transitions.

Note: it is different from the code that uses just .now() . If you use .now() (no argument) then you get a naive datetime object that represents local time and in that case if a DST transition happens between start and end times then end - start returns a completely wrong result ie, the code may be wrong by an hour approximately couple of times per year in some timezones.

the reason why you are getting an error is because class time does not support subtraction. You must turn time into miliseconds (int format) to subtract from one another.

instead of using datetime , use time

import time

def timenow():
    return int(round(time.time() * 1000))

startTime = timenow()
time.sleep(1)
endTime = timenow()

delta = endTime - startTime
print delta

The simplest solution would be to convert the datetime objects to timestamps and subtract those. If you use Python 3.3 or later you can simply do something along these lines

startTime = datetime.datetime.now(timezone.utc).timestamp()
...
endTime = datetime.datetime.now(timezone.utc).timestamp()

Then you can just subtract those.

In Python 2 you do not have the timestamp method available. One way around would be to use a timedelta object:

startTime = datetime.datetime.now(timezone.utc)
...
endTime = datetime.datetime.now(timezone.utc)
dt = (endTime - startTime).total_seconds()

A third option is to simply use raw timestamps with time.time() and subtract them to get the time interval in seconds and fraction of seconds.

To be extra safe you could use time.monotonic() as @Sebastian mentions.

This is the best answer for this problem: https://stackoverflow.com/a/39651061/2686243

from datetime import datetime, date

duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM