Reputation: 8985
I am having the following issue, and cant figure out what i am missing here.
I have enabled the Timezone in the settings.py
TIME_ZONE = 'America/Chicago'
USE_TZ = True
Now, when I have created an object at 3.15pm (Local time), and i get the following date stored in my created_at
field in database.
created_at = models.DateTimeField(auto_now_add=True)
2014-12-12 11:03:48
When i render that date in my templates i get the following value.
{{ image.created_at }}
= >
Dec. 12, 2014, 5:03 a.m.
from datetime import datetime
from dateutil.tz import tzutc, tzlocal
utc = datetime.now(tzutc())
print('UTC: ' + str(utc))
local = utc.astimezone(tzlocal())
print('Local: ' + str(local))
I am getting correct datetime here. And when i use myobject.created_at.astimezone(tzlocal())
it also returns correct. but its when in Templates i get 1 hour ahead time. WHY? i tried both |local
filter also but no use
What am I missing?
Upvotes: 6
Views: 15332
Reputation: 772
I found easy way to do it with custom template filter, please refer to this answer.
Before filter: 2022-09-15 17:56:26.936210
After filter -> 15.09.2022 20:56
Upvotes: 0
Reputation: 547
Add the below snippet to the base.html
{% load tz %}
{% timezone "Asia/Kolkata" %}
<All content goes here>
{% endtimezone %}
Inherit this to all templates. Everything render in 'Asia/Kolkata' time zone
Upvotes: 11
Reputation: 14180
From the docs:
localtime
Forces conversion of a single value to the current time zone.
For example:
{% load tz %}
{{ value|localtime }}
Upvotes: 3
Reputation: 728
Django always stores data in UTC with timezone aware info. Your settings.py is for America/Chicago therefore template renders it accordingly.
You can use timezone filters in your template to always show local time {{ image.created_at | localtime }}
. At template start do {% load tz %}
timezone tag library.
I.e.
{% load tz %}
<!-- template -->
{{ image.created_at | localtime }}
<!-- more template -->
Upvotes: 6