Dans OpenERP, lorsque j'essaie d'imprimer la date et l'heure actuelles, j'imprime toujours l'heure UTC. Mais je veux avoir du temps dans le fuseau horaire de l'utilisateur. Chaque utilisateur a un fuseau horaire différent. For example 'CST6CDT'
, «États-Unis/Pacifique» ou «Asie/Calcutta». J'ai donc besoin de temps dans le fuseau horaire de l'utilisateur pour que je puisse afficher la date et heure exacte dans le rapport. J'ai essayé de changer le fuseau horaire en utilisant les fonctions localize() et replace() dans le module datatime. Mais je n'ai pas eu la bonne sortie.Comment obtenir le fuseau horaire local de l'utilisateur autre que le fuseau horaire du serveur (UTC) en python?
Répondre
Vous l'avez.
from datetime import datetime
from pytz import timezone
fmt = "%Y-%m-%d %H:%M:%S"
# Current time in UTC
now_utc = datetime.now(timezone('UTC'))
print now_utc.strftime(fmt)
# Convert to US/Pacific time zone
now_pacific = now_utc.astimezone(timezone('US/Pacific'))
print now_pacific.strftime(fmt)
# Convert to Europe/Berlin time zone
now_berlin = now_pacific.astimezone(timezone('Europe/Berlin'))
print now_berlin.strftime(fmt)
Courtoisie: http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
Au OpenERP 6.1 le fuseau horaire de toutes les opérations Python qui se passe sur le côté serveur (et modules) est forcé à être UTC. Ceci était une décision de conception expliquée dans divers endroits [1]. Le rendu des valeurs datetime dans le fuseau horaire de l'utilisateur est destiné à être effectué sur le client exclusivement.
Il y a très peu de cas où il est judicieux d'utiliser le fuseau horaire de l'utilisateur au lieu de l'UTC côté serveur, mais l'impression des valeurs datetime dans les rapports en fait partie, car le client n'aura aucune chance de convertir le contenu du rapport résultant. C'est pourquoi le moteur de rapport fournit une méthode utilitaire pour ce faire: la méthode formatLang()
fournie dans le contexte des rapports (au moins ceux basés sur RML) formatera la date en fonction du fuseau horaire de l'utilisateur si vous appelez date_time=True
(il utilise la variable de contexte tz
passée dans les appels RPC et basée sur les préférences de fuseau horaire de l'utilisateur) Vous pouvez trouver un exemple de la façon dont cela est utilisé dans les addons officiels, par exemple dans le delivery module (l.171).
Jetez un oeil à la implementation de formatLang()
si vous voulez savoir comment il fait réellement la conversion.
[1]: Voir le OpenERP 6.1 release notes, ce other question, ainsi que le commentaire 4 sur bug 918257 ou bug 925361.
Thanks Odony. Je veux passer le fuseau horaire à mon rapport Jasper. Il ne passait pas correctement au serveur jasper. J'ai donc passé l'heure locale au rapport Jasper – OmaL
de: http://help.openerp.com/question/30906/how-to-get-users-timezone-for-python/
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
import pytz
from openerp import SUPERUSER_ID
# get user's timezone
user_pool = self.pool.get('res.users')
user = user_pool.browse(cr, SUPERUSER_ID, uid)
tz = pytz.timezone(user.context_tz) or pytz.utc
# get localized dates
localized_datetime = pytz.utc.localize(datetime.datetime.strptime(utc_datetime,DATETIME_FORMAT)).astimezone(tz)
DateInUTC = < ~ variable dans le temps pour convertir
Pour convertir au fuseau horaire de l'utilisateur:
LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context)
Pour supprimer le décalage:
LocalizedDate = LocalizedDate.replace(tzinfo=None)
- 1. Comment obtenir le bon fuseau horaire (fuseau horaire du serveur) au format de date UTC
- 2. Comment puis-je obtenir le fuseau horaire du serveur local?
- 3. Comment changer le fuseau horaire par défaut UTC en fuseau horaire local
- 4. Comment régler le fuseau horaire du serveur MySQL en UTC?
- 5. Comment utiliser Objective-c NSTimeZone pour convertir le fuseau horaire du système en fuseau horaire local?
- 6. Convertir la date d'un fuseau horaire en fuseau horaire local
- 7. Fuseau horaire Nvd3 différent fuseau horaire
- 8. Convertir le fuseau horaire décalage horaire en fuseau horaire (militaire?)
- 9. Comment désactiver R warning: le fuseau horaire de l'objet (UTC) est différent du fuseau horaire actuel()
- 10. Comment imprimer un datetime Python dans le fuseau horaire local?
- 11. Jboss avec fuseau horaire UTC
- 12. Conversion du format UTC DateTime en un autre fuseau horaire
- 13. .NET Décalage du fuseau horaire par nom de fuseau horaire
- 14. Forcer le fuseau horaire local Qt à UTC
- 15. Fuseau horaire date fuseau horaire problème dans le dojo
- 16. Rails: obtenir #beginning_of_day dans le fuseau horaire
- 17. Comment obtenir le décalage UTC actuel (fuseau horaire)?
- 18. comment obtenir fuseau horaire
- 19. Forcer le fuseau horaire Java en GMT/UTC
- 20. convertir les valeurs locales de date, heure et fuseau horaire en utc fuseau horaire dans php
- 21. Synchronisation de fuseau horaire
- 22. Javascript: Convertir un objet UTC Date() en fuseau horaire local
- 23. Convertir la date d'un fuseau horaire en un autre fuseau horaire en utilisant les abréviations de fuseau horaire
- 24. Convertir UTC en fuseau horaire spécifique
- 25. Comment configurer le fuseau horaire?
- 26. fuseau horaire local de l'appareil
- 27. JGit obtenir le fuseau horaire d'un commit
- 28. php - comment obtenir le fuseau horaire du serveur pour Windows?
- 29. UTC locale Azure Fuseau horaire WebRole
- 30. Convertir une date de fuseau horaire dans le fuseau horaire du système dans iOS
Ceci est un exemple de la façon dont vous pouvez faire des conversions de fuseau horaire en Python pur, mais OpenERP a recommandé des façons de le faire et des directives indiquant quand cela a du sens (voir ma réponse) – odony