2
time1 = datetime.now();
time1 -= time1;
time2 = datetime.now();
time2 -= time2;

Thats how i try to define a datetime to be equal to Zero. What is the right way to do it?

Thats what im trying to do:

import urllib2
from datetime import datetime

time1 = datetime.now();
time1 -= time1;
time2 = datetime.now();
time2 -= time2;
for i in range(0, 5):
    x = datetime.now()
    response = urllib2.urlopen("http://www.google.com")
    time1 += datetime.now() - x
    x = datetime.now()
    response = urllib2.urlopen("http://facebook.com") 
    time2 += datetime.now() - x
print time1
print time2

it works, but i believe it is wrong way to do so.

8
  • 1
    time1, time2 (after the "time1 -= time1" statement executed) is not datetime object. It's timedelta object. What you want is zero timedelta, you can make it with timedelta(0). Commented Jun 9, 2013 at 16:11
  • NameError: name 'timedelta' is not defined Commented Jun 9, 2013 at 16:12
  • timedelta is from datetime module. Import it first. (by "from datetime import datetime") Commented Jun 9, 2013 at 16:12
  • It's datetime.timedelta. Commented Jun 9, 2013 at 16:13
  • timedelta documentation. Commented Jun 9, 2013 at 16:13

2 Answers 2

6

As the document says, the construction method is as following:

datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

And the datetime.MINYEAR is 1, which means the minimum year value is 1. So you can not define a datetime to be equal to Zero. With your method:

 time1 = datetime.now();
 time1 -= time1;

The object time1 is changed to be datetime.timedelta not datetime.datetime object.

>>> time1 = datetime.datetime.now();
>>> time1
datetime.datetime(2013, 6, 9, 11, 13, 3, 57000)
>>> type(time1)
<class 'datetime.datetime'>
>>> time1 -= time1;
>>> time1
datetime.timedelta(0)
>>> type(time1)
<class 'datetime.timedelta'>

Thanks to @falsetru, the method to define a timedelta as zero, we should do as:

zero = timedelta(0) 
Sign up to request clarification or add additional context in comments.

2 Comments

ok then, what is the right why to define datetime.timedelta that equals to Zero?
@Nirock, from datetime import timedelta; zero = timedelta(0)
1
from datetime import datetime, timedelta
import urllib2

def benchmark(url, count=5):
    elapsed = timedelta(0)
    for i in range(count):
        time1 = datetime.now()
        u = urllib2.urlopen(url)
        try:
            u.read()
        finally:
            u.close()
        time2 = datetime.now()
        elapsed += time2 - time1
    return elapsed

for url in ("http://www.google.com", "http://facebook.com"):
    print url
    print benchmark(url)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.