Comment définir le fuseau horaire dans Django?


139

Dans le settings.pyfichier de mon projet django , j'ai cette ligne:

TIME_ZONE = 'UTC'

Mais je veux que mon application s'exécute dans le fuseau horaire UTC + 2, alors je l'ai changée en

TIME_ZONE = 'UTC+2'

Cela donne l'erreur ValueError: Incorrect timezone setting: UTC+2. Quelle est la bonne façon de procéder?

Merci!

Réponses:



28

Pour obtenir un ensemble de tous les noms de fuseaux horaires (ID) valides de la base de données tz , vous pouvez utiliser le pytzmodule en 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'})

1
Il est également intéressant de noter qu'il existe une liste plus courte de fuseaux horaires, sans compter ceux obsolètes avec pytz.common_timezones.
vmonteco

11

Choisissez un fuseau horaire valide dans la base de données tzinfo . Ils ont tendance à prendre la forme par exemple Africa/GaborneetUS/Eastern

Trouvez celui qui correspond à la ville la plus proche de vous, ou celui qui a votre fuseau horaire, puis définissez votre valeur sur TIME_ZONEpour correspondre.


4

Les valeurs timeZone valides sont basées sur la base de données tz (timezone) utilisée par Linux et d'autres systèmes Unix. Les valeurs sont des chaînes (xsd: string) sous la forme « Zone / Emplacement », dans lesquelles:

La zone est un nom de continent ou d'océan. La zone comprend actuellement:

  • Afrique
  • Amérique (Amérique du Nord et Amérique du Sud)
  • Antarctique
  • Arctique
  • Asie
  • atlantique
  • Australie
  • L'Europe 
  • Etc (zone administrative. Par exemple, «Etc / UTC» représente le temps universel coordonné.)
  • Indien
  • Pacifique

L'emplacement est la ville, l'île ou un autre nom régional.

Les noms de zone et les abréviations de sortie adhèrent aux conventions UNIX POSIX (interface de système d'exploitation portable), qui utilise des signes positifs (+) à l'ouest de Greenwich et des signes négatifs (-) à l'est de Greenwich, ce qui est le contraire de ce qui est généralement attendu. Par exemple, «Etc / GMT + 4» correspond à 4 heures de retard sur UTC (c'est-à-dire à l'ouest de Greenwich) plutôt que 4 heures d'avance sur UTC (temps universel coordonné) (à l'est de Greenwich).

Voici une liste de tous les fuseaux horaires valides

Vous pouvez modifier le fuseau horaire dans vos paramètres.py comme suit

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

J'ai trouvé cette question cherchant à changer le fuseau horaire dans le settings.pyfichier de mon projet Django au Royaume-Uni.

En utilisant la base de données tz dans la solution de jfs, j'ai trouvé la réponse:

    TIME_ZONE = 'Europe/London'

1
  1. Remplacez TIME_ZONE par votre fuseau horaire local et conservez USE_TZ sur True dans "setting.py":

    TIME_ZONE = 'Asie / Shanghai'

    USE_I18N = Vrai

    USE_L10N = Vrai

    USE_TZ = Vrai

  2. Cela écrira et stockera l'objet datetime au format UTC dans la base de données principale.

  3. Ensuite, utilisez la balise de modèle pour convertir l'heure UTC dans votre modèle d'interface en tant que telle:

                <td> 
                    {% load tz %}
                    {% get_current_timezone as tz %}
                    {% timezone tz %}
                        {{ message.log_date | time:'H:i:s' }}
                    {% endtimezone %} 
                </td>

ou utilisez les filtres de modèle de manière concise:

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. Vous pouvez vérifier plus de détails dans la documentation officielle: Fuseau horaire par défaut et fuseau horaire actuel

    Lorsque la prise en charge des fuseaux horaires est activée, Django stocke les informations datetime en UTC dans la base de données, utilise en interne des objets datetime sensibles au fuseau horaire et les traduit dans le fuseau horaire de l'utilisateur final dans des modèles et des formulaires.


1

Solution universelle, basée sur la prise en charge des noms TZ de Django :

UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'

+/- est intentionnellement commuté.


0
  1. télécharger le dernier fichier pytz (pytz-2019.3.tar.gz) à partir de:

    https://pypi.org/simple/pytz/
  2. copiez-le et extrayez-le dans le site_packagesrépertoire de votre projet

  3. dans cmd, accédez au dossier extrait et exécutez:

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' ou nom du pays

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.