I have Django model:
class Deal(models.Model):
...
created_at = models.DateTimeField(auto_now_add=True)
When I get created_at value by queryset, it always return to me the datetime value with tzinfo=<UTC> like this:
Deal.objects.filter(id=62).values('created_at')
<QuerySet [{'created_at': datetime.datetime(2015, 10, 26, 4, 10, 54, 997000, tzinfo=<UTC>)}]>
How do I force queryset return datetime value in current timezone (e.g Asia/Ho_Chi_Minh)?
Advertisement
Answer
Django always saves datetimes in UTC, and they are usually returned in UTC as well (depending on the database and database adapter settings). You normally select a timezone by using activate(). That affects various things, like the way datetimes are displayed in templates.
If you want to explicitly convert the timezone for some reason, you can easily do that with localtime(). For example:
from django.utils.timezone import localtime
import pytz
tz = pytz.timezone("Asia/Ho_Chi_Minh")
deals_utc = Deal.objects.filter(id=62).values("created_at")
deals_local = {"created_at": localtime(dt, tz) for dt in deals_utc.values()}