Converting UTC datetime to user's local date and time

前端 未结 3 1371
天命终不由人
天命终不由人 2021-02-10 05:18

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.

3条回答
  •  粉色の甜心
    2021-02-10 06:09

    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:

    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)

提交回复
热议问题