2009-05-04 3 views
3

Actuellement, ma méthode consiste à créer un processeur de contexte qui est ensuite inclus dans l'ensemble du site. Cependant, je remarque que j'ai problèmes de prise en compte des changements d'heure d'été. J'habite en dehors des États-Unis BTW et mon serveur est aux États-Unis, mais son fuseau horaire est réglé sur le mien. Cependant, puisque nous ne tenons pas compte de l'heure d'été , il est toujours une heure d'avance sur mon heure locale .Quel est le meilleur moyen d'afficher l'heure et la date exactes dans Django?

Une idée pour expliquer cela? J'ai utilisé timedelta -1 dans le passé mais de toute façon je ne pense pas que ce soit la bonne solution .

Répondre

5

Le fuseau horaire que vous avez défini sur le serveur ne devrait pas avoir d'importance dans votre application Django. Django renvoie l'heure en fonction de la valeur de votre variable TIME_ZONE dans votre settings.py, et non de ce que vous avez défini sur le serveur. Par exemple, un serveur peut desservir plusieurs sites alimentés par Django, chacun avec un paramètre de fuseau horaire distinct.

Voir: http://docs.djangoproject.com/en/dev/ref/settings/#time-zone. Assurez-vous de régler votre variable TIME_ZONE sur le nom Zoneinfo (par exemple, America/Belize) au lieu de simplement GMT-6, car cela ne tient pas compte de l'heure d'été. En utilisant le nom Zoneinfo, Django retournera la version de l'heure basée sur l'heure d'été. Réglez-le donc correctement, et vous devriez être en mesure d'obtenir le fuseau horaire souhaité dans votre application Django.

{% now h:ia %} 

Cela retournera l'heure dans un format comme 9h30.

+2

Dans ce cas, son fuseau horaire devrait probablement être America/Belize – Powerlord

+0

Ah, c'est vrai. Je vais le changer :) –

+0

parfait! travaillé à merveille, et je pense que c'est la façon dont il devrait être ... n'est pas django doux? – Rasiel

1

Si le serveur est à votre fuseau horaire et que vous voulez afficher l'heure dans votre fuseau horaire, vous devez simplement être en mesure d'utiliser quelque chose comme:

{% now M d, Y h-ia %} 

Pour donner quelque chose comme 23 Jan, 2009 9: 21 heures

Voir http://docs.djangoproject.com/en/dev/ref/templates/builtins/

+0

merci ce qui a contribué aussi, pour une raison que je ne l'avais pas remarqué le filtre Maintenant modèle – Rasiel

0

On dirait que, alors que le temps est réglé à temps, le fuseau horaire n'est pas.

Si cela est un serveur Linux, le fuseau horaire est contrôlé par le fichier /etc/localtime

Ceci est en fait un lien symbolique vers l'un des fichiers de fuseau horaire dans /usr/share/zoneinfo. La valeur par défaut est probablement quelque chose comme /usr/share/zoneinfo/America/New_York, mais vous pouvez changer à /usr/share/zoneinfo/America/Belize * en procédant comme suit:

ln -sf /usr/share/zoneinfo/America/Belize /etc/localtime 

L'emplacement sera légèrement différent si vous utilisez un autre système d'exploitation * nix. Par exemple, Solaris a des fichiers de fuseau horaire dans /usr/share/lib/zoneinfo

Ceci suppose que vous avez un accès root sur la machine, car vous avez accès à la modification de l'horloge système.

* Votre emplacement est répertorié comme Belize dans votre profil, au cas où vous vous demanderiez où je l'ai eu.

+0

Comme noté ci-dessus, django n'utilise pas le temps serveur, mais merci néanmoins – Rasiel

+1

J'avais supprimé cette réponse après avoir upvoté l'autre réponse, mais alors j'ai pensé que "Peut-être que cela sera utile à quelqu'un de toute façon" et l'a rétabli. – Powerlord

0

Si vous ne souhaitez afficher que la date et l'heure côté client, vous pouvez simplement utiliser Javascript, qui utilisera la date et l'heure de l'ordinateur client.

Il peut y avoir des raisons pour lesquelles vous ne voulez pas faire cela, mais je pensais que je le lancerais de toute façon.

+0

merci mais non, je veux afficher l'heure dans mon pays local. – Rasiel

1

Avec Django 1.4, vous pouvez désormais utiliser la django.utils.timezone pour définir le fuseau horaire actuel pour un utilisateur donné

Questions connexes