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!
This question is related to
python
python-3.x
django
timezone
utc
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>
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.
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.
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'})
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:
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
Use Area/Location format properly. Example:
TIME_ZONE = 'Asia/Kolkata'
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'
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
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.
Source: Stackoverflow.com