38

This is my first time here so I hope I post this question at the right place. :)

I need to build flood control for my script but I'm not good at all this datetime to time conversions with UTC and stuff. I hope you can help me out. I'm using the Google App Engine with Python. I've got a datetimeproperty at the DataStore database which should be checked if it's older than 20 seconds, then proceed.

Could anybody help me out?

So in semi-psuedo:

q = db.GqlQuery("SELECT * FROM Kudo WHERE fromuser = :1", user)
lastplus = q.get()

if lastplus.date is older than 20 seconds:
print"Go!"
Jelle
  • 513
  • 2
  • 5
  • 8
  • 1
    Just as a general note, it's a good idea to store all dates in UTC and apply time zones at the last possible second. See http://www.enricozini.org/2009/debian/using-python-datetime/ for info. – Cameron Mar 07 '10 at 22:19
  • Thanks for the solution and the extra info! :) – Jelle Mar 07 '10 at 22:58

2 Answers2

59

You can use the datetime.timedelta datatype, like this:

import datetime
lastplus = q.get()
if lastplus.date < datetime.datetime.now()-datetime.timedelta(seconds=20):
    print "Go"

Read more about it here: http://docs.python.org/library/datetime.html

Cheers,

Philip

mojbro
  • 1,509
  • 13
  • 13
5

Try this:

from datetime import timedelta, datetime
if lastplus.date < datetime.utcnow() + timedelta(seconds = -20):
    print "fee fie fo foo!"
Cameron
  • 96,106
  • 25
  • 196
  • 225