In OpenERP, quando provo a stampare la data e l'ora correnti, stampa sempre l'ora 'UTC'. Ma voglio avere tempo nel fuso orario dell'utente. Ogni utente ha un fuso orario diverso. For example 'CST6CDT'
, "USA/Pacifico" o "Asia/Calcutta". Quindi ho bisogno di ottenere il fuso orario dell'utente in modo che possa mostrare il datetime corretto nel rapporto. Ho provato a cambiare il fuso orario usando la funzione localize() e replace() nel modulo datatime. Ma non ho ottenuto l'output corretto.Come ottenere il fuso orario locale dell'utente diverso dal fuso orario del server (UTC) in python?
Come ottenere il fuso orario locale dell'utente diverso dal fuso orario del server (UTC) in python?
risposta
Capito.
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)
Cortesia: http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
partire OpenERP 6.1 fuso orario di tutte le operazioni di Python che accadono sul lato server (e in moduli) è costretto a essere UTC. Questa è stata una decisione di progettazione spiegata in vari punti [1]. Il rendering dei valori datetime nel fuso orario dell'utente è pensato per essere eseguito esclusivamente sul lato client.
Ci sono pochissimi casi in cui ha senso usare il fuso orario dell'utente invece di UTC sul lato server, ma in effetti la stampa di valori datetime all'interno dei report è uno di questi, perché il lato client non avrà possibilità di convertire il contenuto del rapporto risultante.
Ecco perché il motore di report fornisce un metodo di utilità per farlo: il metodo formatLang()
fornito nel contesto dei report (almeno quelli basati su RML) formatta la data in base al fuso orario dell'utente se si chiama con un valore datetime e con date_time=True
(utilizza la variabile di contesto tz
trasmessa nelle chiamate RPC e in base alle preferenze del fuso orario dell'utente) È possibile trovare un esempio di come questo viene utilizzato nei componenti aggiuntivi ufficiali, ad esempio nello delivery module (l.171).
Dai uno sguardo allo implementation di formatLang()
se vuoi sapere come funziona la conversione.
[1]: vedere l'OpenERP 6.1 release notes, questo other question, nonché il commento n. 4 su bug 918257 o bug 925361.
Grazie Odony. Voglio passare il fuso orario al mio rapporto Jasper. Non stava passando correttamente al server jasper. Così ho passato l'ora locale al rapporto di Jasper – OmaL
da: 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 = < ~ Tempo variabile per convertire
Per convertire in fuso orario dell'utente:
LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context)
Per rimuovere l'offset:
LocalizedDate = LocalizedDate.replace(tzinfo=None)
- 1. Come posso ottenere il fuso orario del server locale?
- 2. Come ottenere il fuso orario del cliente?
- 3. Ottieni il fuso orario locale del sistema in python
- 4. Ottenere fuso orario locale del dispositivo
- 5. Convertire fuso orario locale a PST fuso orario in C#
- 6. Offset fuso orario locale in PostgreSQL
- 7. fuso orario locale in Ruby
- 8. Ottieni fuso orario locale in django
- 9. COME OTTENERE: Impostazione del fuso orario del server FTP?
- 10. ottenere fuso orario dell'utente
- 11. Python Fuso orario conversione
- 12. Ottenere Fuso orario in Android
- 13. MomentJS toISOString con fuso orario locale
- 14. Django: emissione del fuso orario
- 15. Come si stampa un datetime Python nel fuso orario locale?
- 16. Java: fuso orario perché il fuso orario diverso dà lo stesso valore in millisec
- 17. Come impostare il fuso orario in gnuplot?
- 18. Fuso orario per Firebase.ServerValue.TIMESTAMP
- 19. Cambia fuso orario del browser
- 20. NSDate indipendente dal fuso orario?
- 21. regolare il fuso orario
- 22. Javascript: Converti un oggetto UTC Date() nel fuso orario locale
- 23. SQLAlchemy Come caricare le date con fuso orario = UTC (date memorizzati senza fuso orario)
- 24. javascript toISOString() ignora l'offset del fuso orario
- 25. Converti data in fuso orario diverso
- 26. impostazione del fuso orario in Python
- 27. javascript Data fuso orario
- 28. Calcola il tempo in un fuso orario diverso in Python
- 29. conversione fuso orario Silverlight
- 30. Nome fuso orario nella lingua locale
Questo è un esempio di come potresti fare le conversioni del fuso orario in Python normale, ma OpenERP ha raccomandato modi per farlo e le linee guida dicono quando ha senso (vedi la mia risposta) – odony