Django: Comment rendre un objet datetime conscient du fuseau horaire dans lequel il a été créé?
Je suis en cours d'exécution d'un programme qui demande de l'océan marée de données à partir d'un serveur distant. Le time
et date
de cette marée de données est calculée sur la base de ma machine locale du fuseau horaire. Je veux utiliser ces locaux des dates et des heures à créer un datetime
objet, ce que je ne puis l'enregistrer dans un Django modèle.
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
Comment puis-je m'assurer que les datetime
objet est conscient qu'il a été créé sur la base d'un fuseau horaire local, avant de le poster à Django?
Je suppose, je voudrais qu'elle ressemble à ceci avant de poster:
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute, loc_timezone)
Comment puis-je obtenir le fuseau horaire local de ma machine de façon dynamique? Et comment m'assurer que tous les utilisateurs de voir le temps convertis à leur propre fuseau horaire local.
source d'informationauteur sgarza62
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, assurez-vous que vous êtes familier avec Django documentation sur les fuseaux horairesensemble
USE_TZ = True
et installerpytz
.Je n'arrive pas à comprendre où votre date est à venir. Si ça vient du serveur dans le cadre de leurs données (c'est à dire qu'il représente lorsque les marées ont été mesurés), il devrait être en UTC déjà ou vous aurez besoin de savoir l'heure de la zone qu'ils utilisent. Si vous êtes à la création, puis la chose la plus simple est tout simplement d'utiliser
django.utils.le fuseau horaire.now()
(qui renvoie un fuseau horaire-conscient datetime) lorsque vous créez une instance du modèle.Si vous avez vraiment besoin de créer manuellement, comme vous l'avez décrit, suivre l'usage ici:
Au lieu de "Europe/Helsinki", vous pouvez obtenir le fuseau horaire par défaut avec
django.utils.le fuseau horaire.get_default_timezone_name()
. Ce sera le temps de la zone définie par lesTIME_ZONE
paramètre, et ne peut pas être la réelle le fuseau horaire du système. Obtenir le système de fuseau horaire dans un format quipytz
peut comprendre, c'est discutée dans cette réponse.Enfin, veiller à ce que les utilisateurs voient la fois converti sur le fuseau horaire local est non-trivial, comme discuté ici:
Voir les exemples là pour obtenir des conseils.