Converting UTC datetime to user's local date and time
Question: I'm using python on Django and Google App Engine. I'm also using the
DateTimeProperty in one of my models. Occasionally I would like to display
that date and time to the user.

What is the best to convert the datetime stored in DateTimeProperty into the
user's datetime?

Or a more precise way of framing the question: What is the best way to get a
client's timezone and convert a python datetime object into their own local
time?


Answer: This is more a Python question, than a GAE one, unless GAE has some
infrastructure to facilitate this (I've made a quick scan but haven't found
any reference).

Basically, you want to store date/times in UTC timezone (e.g. use
datetime.datetime.utcnow) along with user timezones, which you can either try
to extract from user IPs (using GeoDjango, if avaiable on GAE, or pygeoip; you
need some geolocation db like: <http://www.maxmind.com/app/geolitecity>), or
to explicitly ask users about it - which has the advantage that you can ask
for a descriptive timezone name, like "Europe/Warsaw". If you ask for just
UTC+2, then you loose any indication of DST shifts.

Then, you can shift from utc to the desired timezone using e.g.
[pytz](http://pytz.sourceforge.net/):

    
    
    import pytz
    local_tz = pytz.timezone(timezone_name)
    return timestamp_utc.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None)
    

\-- where `timestamp_utc` is utc datetime that you want to convert, and
timezone_name is the mentioned "Europe/Warsaw".

(Note that I don't know which of these works in GAE, but at least you will
know what to look for)

