How to set the timezone in Django?
PythonPython 3.xDjangoTimezoneUtcPython Problem Overview
In my django project's settings.py
file, I have this line :
TIME_ZONE = 'UTC'
But I want my app to run in UTC+2 timezone, so I changed it to
TIME_ZONE = 'UTC+2'
It gives the error ValueError: Incorrect timezone setting: UTC+2
. What is the correct way of doing this?
Thanks!
Python Solutions
Solution 1 - Python
Here is the list of valid timezones:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
You can use
TIME_ZONE = 'Europe/Istanbul'
for UTC+02:00
Solution 2 - Python
To get a set of all valid timezone names (ids) from the tz database, you could use pytz
module in Python:
>>> import pytz # $ pip install pytz
>>> pytz.all_timezones_set
LazySet({'Africa/Abidjan',
'Africa/Accra',
'Africa/Addis_Ababa',
'Africa/Algiers',
'Africa/Asmara',
'Africa/Asmera',
...
'UTC',
'Universal',
'W-SU',
'WET',
'Zulu'})
Solution 3 - Python
Choose a valid timezone from the tzinfo database. They tend to take the form e.g. Africa/Gaborne
and US/Eastern
Find the one which matches the city nearest you, or the one which has your timezone, then set your value of TIME_ZONE
to match.
Solution 4 - Python
Valid timeZone values are based on the tz (timezone) database used by Linux and other Unix systems. The values are strings (xsd:string) in the form “Area/Location,” in which:
Area is a continent or ocean name. Area currently includes:
- Africa
- America (both North America and South America)
- Antarctica
- Arctic
- Asia
- Atlantic
- Australia
- Europe
- Etc (administrative zone. For example, “Etc/UTC” represents Coordinated Universal Time.)
- Indian
- Pacific
Location is the city, island, or other regional name.
The zone names and output abbreviations adhere to POSIX (portable operating system interface) UNIX conventions, which uses positive (+) signs west of Greenwich and negative (-) signs east of Greenwich, which is the opposite of what is generally expected. For example, “Etc/GMT+4” corresponds to 4 hours behind UTC (that is, west of Greenwich) rather than 4 hours ahead of UTC (Coordinated Universal Time) (east of Greenwich).
Here is a list all valid timezones
You can change time zone in your settings.py as follows
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Solution 5 - Python
Universal solution, based on Django's TZ name support:
UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'
+/- is intentionally switched.
Solution 6 - Python
This works just fine for me (I am still testing the app locally).
In settings.py
file type:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Beirut'
USE_I18N = True
USE_L10N = True
USE_TZ = False
#use your own TIME_ZONE: https://gist.github.com/heyalexej/8bf688fd67d7199be4a1682b3eec7568
Solution 7 - Python
-
Change the TIME_ZONE to your local time zone, and keep USE_TZ as True in 'setting.py':
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
-
This will write and store the datetime object as UTC to the backend database.
-
Then use template tag to convert the UTC time in your frontend template as such:
<td> {% load tz %} {% get_current_timezone as tz %} {% timezone tz %} {{ message.log_date | time:'H:i:s' }} {% endtimezone %} </td>
or use the template filters concisely:
<td>
{% load tz %}
{{ message.log_date | localtime | time:'H:i:s' }}
</td>
4. You could check more details in the official doc: Default time zone and current time zone
When support for time zones is enabled, Django stores datetime information in UTC in the database, uses time-zone-aware datetime objects internally, and translates them to the end user’s time zone in templates and forms.
Solution 8 - Python
I found this question looking to change the timezone in my Django project's settings.py
file to the United Kingdom.
Using the tz database in jfs' solution I found the answer:
TIME_ZONE = 'Europe/London'
Solution 9 - Python
Here is the list of valid timezones:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
You can use the Time zone For Dhaka
TIME_ZONE = 'Asia/Dhaka'
for UTC+06:00 (Dhaka or Astana)
Solution 10 - Python
-
download latest pytz file (pytz-2019.3.tar.gz) from:
https://pypi.org/simple/pytz/
-
copy and extract it to
site_packages
directory on yor project -
in cmd go to the extracted folder and run:
python setup.py install
-
TIME_ZONE = 'Etc/GMT+2'
or country name
Solution 11 - Python
Use Area/Location format properly. Example:
TIME_ZONE = 'Asia/Kolkata'
Solution 12 - Python
Add Preferred TIME_ZONE and set USE_TZ to False like following
- TIME_ZONE = 'Asia/Kolkata'
- USE_TZ = False
Hope it will work.