How to set the timezone in Django?

PythonPython 3.xDjangoTimezoneUtc

Python 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

  1. 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

  2. This will write and store the datetime object as UTC to the backend database.

  3. 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

  1. download latest pytz file (pytz-2019.3.tar.gz) from:

     https://pypi.org/simple/pytz/
    
  2. copy and extract it to site_packages directory on yor project

  3. in cmd go to the extracted folder and run:

     python setup.py install
    
  4. 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjeffView Question on Stackoverflow
Solution 1 - PythonSelcukView Answer on Stackoverflow
Solution 2 - PythonjfsView Answer on Stackoverflow
Solution 3 - PythonCrastView Answer on Stackoverflow
Solution 4 - PythonANFAS PVView Answer on Stackoverflow
Solution 5 - PythonPunnerudView Answer on Stackoverflow
Solution 6 - PythonHussein Al AshmarView Answer on Stackoverflow
Solution 7 - PythonFreman ZhangView Answer on Stackoverflow
Solution 8 - PythonMarkView Answer on Stackoverflow
Solution 9 - PythonShezan MahamudView Answer on Stackoverflow
Solution 10 - PythonS.Rasool MirtalebiView Answer on Stackoverflow
Solution 11 - PythonRohit PatilView Answer on Stackoverflow
Solution 12 - PythonRabeul HasanView Answer on Stackoverflow