Search code examples
djangotimezonepytz

Getting the current date in a particular timezone django


I want to get the current date for a specific timezone in my Django app, irrespective of the server's timezone. I save the user's timezone in the database. I'll then use that in the following function:

def current_date(zone):
    utc = timezone.now()
    tz = pytz.timezone(zone)
    return utc.astimezone(tz).date()

print(current_date('Pacific/Auckland')) #prints 2016-05-30
print(current_date('Africa/Accra')) #prints 2016-05-29

It seems to work, but working with timezones seems complex and I'm wondering if something can go wrong with this approach?


Solution

  • It looks fine as long as getting to the value in view itself is what you want. Since the date/time print is an aspect of presentation you probably may not want to do it in the view code rather in the template using something like below:

    {% load tz %}

    {{ object.datetime_field|timezone:request.user.timezone }}

    assuming you are storing the user's timezone selection in the user model.