# Calculating Time Difference

Posted on

### Question :

Calculating Time Difference

at the start and end of my program, I have

``````from time import strftime
print int(strftime("%Y-%m-%d %H:%M:%S")

Y1=int(strftime("%Y"))
m1=int(strftime("%m"))
d1=int(strftime("%d"))
H1=int(strftime("%H"))
M1=int(strftime("%M"))
S1=int(strftime("%S"))

Y2=int(strftime("%Y"))
m2=int(strftime("%m"))
d2=int(strftime("%d"))
H2=int(strftime("%H"))
M2=int(strftime("%M"))
S2=int(strftime("%S"))

print "Difference is:"+str(Y2-Y1)+":"+str(m2-m1)+":"+str(d2-d1)
+" "+str(H2-H1)+":"+str(M2-M1)+":"+str(S2-S1)
``````

But when I tried to get the difference, I get syntax errors…. I am doing a few things wrong, but I’m not sure what is going on…

Basically, I just want to store a time in a variable at the start of my program, then store a 2nd time in a second variable near the end, then at the last bit of the program, compute the difference and display it. I am not trying to time a function speed. I am trying to log how long it took for a user to progress through some menus. What is the best way to do this?

The `datetime` module will do all the work for you:

``````>>> import datetime
>>> a = datetime.datetime.now()
>>> # ...wait a while...
>>> b = datetime.datetime.now()
>>> print(b-a)
0:03:43.984000
``````

If you don’t want to display the microseconds, just use (as gnibbler suggested):

``````>>> a = datetime.datetime.now().replace(microsecond=0)
>>> b = datetime.datetime.now().replace(microsecond=0)
>>> print(b-a)
0:03:43
``````

``````from time import time

start_time = time()
...

end_time = time()
seconds_elapsed = end_time - start_time

hours, rest = divmod(seconds_elapsed, 3600)
minutes, seconds = divmod(rest, 60)
``````

You cannot calculate the differences separately … what difference would that yield for 7:59 and 8:00 o’clock? Try

``````import time
time.time()
``````

which gives you the seconds since the start of the epoch.

You can then get the intermediate time with something like

``````timestamp1 = time.time()
timestamp2 = time.time()
print "This took %.2f seconds" % (timestamp2 - timestamp1)
``````

time.monotonic() (basically your computer’s uptime in seconds) is guarranteed to not misbehave when your computer’s clock is adjusted (such as when transitioning to/from daylight saving time).

``````>>> import time
>>>
>>> time.monotonic()
452782.067158593
>>>
>>> a = time.monotonic()
>>> time.sleep(1)
>>> b = time.monotonic()
>>> print(b-a)
1.001658110995777
``````

Here is a piece of code to do so:

def(StringChallenge(str1)):

``````#str1 = str1[1:-1]
h1 = 0
h2 = 0
m1 = 0
m2 = 0

def time_dif(h1,m1,h2,m2):
if(h1 == h2):
return m2-m1
else:
return ((h2-h1-1)*60 + (60-m1) + m2)
count_min = 0

if str1[1] == ':':
h1=int(str1[:1])
m1=int(str1[2:4])
else:
h1=int(str1[:2])
m1=int(str1[3:5])

if str1[-7] == '-':
h2=int(str1[-6])
m2=int(str1[-4:-2])
else:
h2=int(str1[-7:-5])
m2=int(str1[-4:-2])

if h1 == 12:
h1 = 0
if h2 == 12:
h2 = 0

if "am" in str1[:8]:
flag1 = 0
else:
flag1= 1

if "am" in str1[7:]:
flag2 = 0
else:
flag2 = 1

if flag1 == flag2:
if h2 > h1 or (h2 == h1 and m2 >= m1):
count_min += time_dif(h1,m1,h2,m2)
else:
count_min += 1440 - time_dif(h2,m2,h1,m1)
else:
count_min += (12-h1-1)*60
count_min += (60 - m1)
count_min += (h2*60)+m2

return count_min
``````