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!

Jeff
la source

Réponses:

228

Voici la liste des fuseaux horaires valides:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Vous pouvez utiliser

TIME_ZONE = 'Europe/Istanbul'

pour UTC + 02: 00

Selcuk
la source
3
En fait, ce n'est que la moitié de l'année lorsque l'heure d'été n'est pas activée. Vous pouvez utiliser Africa / Mbabane pour UTC + 2 toute l'année
Chris SH
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'})
jfs
la source
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.

Crast
la source
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
ANFAS PV
la source
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'
marque
la source
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.

Freman Zhang
la source
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é.

Punnerud
la source
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

S.Rasool Mirtalebi
la source