W OpenERP, kiedy próbuję wydrukować bieżącą datę i godzinę, zawsze drukowany jest czas "UTC". Ale chcę znaleźć czas w strefie czasowej użytkownika. Każdy użytkownik ma inną strefę czasową. For example 'CST6CDT'
, "USA/Pacyfik" lub "Azja/Kalkuta". Muszę więc znaleźć czas w strefie czasowej użytkownika, aby móc pokazać poprawną datę i godzinę w raporcie. Próbowałem zmienić strefę czasową za pomocą funkcji localize() i replace() w module danych. Ale nie otrzymałem prawidłowego wyniku.Jak uzyskać lokalną strefę czasową użytkownika inną niż strefa czasowa serwera (UTC) w pythonie?
Odpowiedz
Mam to.
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)
Dzięki uprzejmości http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
Od OpenERP 6,1 strefa czasowa wszystkich operacji Pythona dzieje się na stronie serwera (aw modułów) jest zmuszony być UTC. To była decyzja projektowa wyjaśniona w różnych miejscach: [1]. Renderowanie wartości datetime w strefie czasowej użytkownika ma być wykonywane wyłącznie po stronie klienta.
Istnieje bardzo niewiele przypadków, w których sensowne jest używanie strefy czasowej użytkownika zamiast UTC na serwerze, ale w rzeczywistości drukowanie wartości datetime w raportach jest jednym z nich, ponieważ po stronie klienta nie będzie szansy na konwersję zawartość wynikowego raportu.
Dlatego mechanizm raportowania udostępnia metodę narzędzia: metoda formatLang()
dostarczana w kontekście raportów (przynajmniej te oparte na RML) sformatuje datę zgodnie ze strefą czasową użytkownika, jeśli zadzwonisz to z wartością datetime iz date_time=True
(używa zmiennej kontekstowej tz
przekazywanej w wywołaniach RPC i na podstawie preferencji strefy czasowej użytkownika) Możesz znaleźć przykład użycia tego w oficjalnych dodatkach, na przykład w delivery module (l.171).
Spójrz na implementation z formatLang()
, jeśli chcesz wiedzieć, jak to naprawdę robi konwersję.
[1]: Zobacz dokument OpenERP 6.1 release notes, ten other question, a także komentarz nr 4 na temat bug 918257 lub bug 925361.
Dzięki Odony. Chcę przekazać strefę czasową do mojego raportu o jaspenie. Nie trafił on poprawnie do serwera jaspisów. W związku z tym przekazałem czas lokalny do raportu jaspisu – OmaL
od: 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 = < ~ Czas zmienna przekonwertować
Aby przekonwertować strefy czasowej użytkownika:
LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context)
Aby usunąć offset:
LocalizedDate = LocalizedDate.replace(tzinfo=None)
- 1. Jak uzyskać lokalną strefę czasową w PHP?
- 2. Jak uzyskać strefę czasową użytkownika?
- 3. Jak mogę uzyskać strefę czasową lokalnego serwera?
- 4. Javascript: Konwertuj obiekt Date() UTC na lokalną strefę czasową
- 5. Calendar.getTime() nie wraca datę UTC jeśli strefa czasowa jest określona
- 6. Wymuś strefę czasową Java jako GMT/UTC
- 7. Strefa czasowa w odlewni chmur
- 8. Szyny: przekonwertuj UTC DateTime na inną strefę czasową
- 9. Jak zdobyć klientów Strefa czasowa w JavaScript?
- 10. W Railsach, jak uzyskać bieżącą strefę czasową (Time.zone) w formacie, który może być użyty z ActiveSupport :: Strefa czasowa [strefa] .parse()?
- 11. Jak przekonwertować datę z jednej strefy czasowej na inną strefę czasową
- 12. Jak określić strefę czasową według przesunięcia UTC?
- 13. Jak uzyskać lokalną strefę czasową z systemu używając nodejs
- 14. Strefa czasowa dla Firebase.ServerValue.TIMESTAMP
- 15. Konwersja daty na inną strefę czasową
- 16. Strefa czasowa z czasem letnim w PostgreSQL
- 17. Konwertowanie datetime UTC na lokalną datę i godzinę użytkownika
- 18. znacznik daty na Twitterze - gdzie jest strefa czasowa?
- 19. Strefa czasowa według współrzędnych
- 20. Python: Jak przekonwertować unixtimestamp i strefę czasową na obiekt datetime?
- 21. Konwertuj strefę czasową UTC w postgresql na EST (czas lokalny)
- 22. Java 7 NIO.2 Files.getLastModifiedTime strefa czasowa
- 23. uzyskać Strefę czasową za pomocą szerokości i długości geograficznej?
- 24. Konwersja daty i czasu na inną strefę czasową w java
- 25. Strefa czasowa dla wygasłych i ostatnio modyfikowanych nagłówków HTTP
- 26. Skąd Android bierze domyślną strefę czasową?
- 27. Jak poprawnie zapisać strefę czasową za pomocą Rubiego i MongoID?
- 28. Jak określić strefę czasową w UIDatePicker
- 29. noda czas iana mapowanie Etc/UTC na strefę czasową Windows
- 30. Jak zmienić strefę czasową w jenkins
Jest to przykład tego, jak można wykonywać konwersje strefy czasowej w zwykłym Pythonie, ale OpenERP zalecił sposoby na zrobienie tego i wytyczne mówiąc, kiedy to ma sens (zobacz moją odpowiedź) – odony