在OpenERP中,當我嘗試打印當前的日期和時間時,它總是打印'UTC'時間。但我想在用戶時區中獲得時間。每個用戶有不同的時區。 For example 'CST6CDT'
,'美國/太平洋'或'亞洲/加爾各答'。所以我需要花時間在用戶時區,以便我可以在報告中顯示正確的日期時間。我試圖在datatime模塊中使用localize()和replace()函數更改時區。但是我沒有得到正確的輸出。如何獲取除python服務器時區(UTC)以外的用戶本地時區?
回答
明白了。
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)
禮貌:http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
作爲OpenERP的6.1所有的Python操作發生在服務器端的時區(在模塊)被強制爲UTC。這是在各個地方解釋的設計決定[1]。日期時間值在用戶時區中的呈現意味着僅在客戶端完成。
很少有情況下,在服務器端使用用戶的時區而不是UTC是合理的,但實際上報表內的打印日期時間值是其中之一,因爲客戶端將無法轉換結果報告的內容。
這就是爲什麼報表引擎提供這樣做的實用方法:報表上下文中提供的formatLang()
方法(至少基於RML的方法)將根據用戶的時區格式化日期它帶有日期時間值和date_time=True
(它使用在RPC調用中傳遞的tz
上下文變量並基於用戶的時區首選項) 您可以在官方插件中找到如何使用它的示例,例如在delivery module (l.171)中。
看看的formatLang()
如果你想知道它如何實際轉換。
[1]:見的OpenERP 6.1 release notes,這other question,以及評論#4上bug 918257或bug 925361。
感謝Odony。我想將時區傳遞給我的碧玉報告。它沒有正確傳遞給碧玉服務器。所以我把當地時間通過了碧玉報告 – OmaL
來自: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 = <〜時間變量
轉換要轉換到用戶的時區:
LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context)
以消除失調:
LocalizedDate = LocalizedDate.replace(tzinfo=None)
- 1. 如何從UTC日期格式獲取正確的時區(服務器時區)
- 2. 獲取用戶時區並將utc轉換爲用戶時區
- 3. 如何獲取服務器的時區?
- 4. 如何在javascript中使用系統時區和服務器的UTC時間獲取當前本地時間
- 5. 如何通過使用PHP獲取客戶端本地時區而不是服務器時區?
- 6. 以UTC格式獲得UTC時區+/-
- 7. python獲取當地時區?
- 8. 如何將UTC時間轉換爲瀏覽器本地時區?
- 9. 如何確定從服務器時區的UTC偏移量?
- 10. 如何獲取UTC時間和unixtimes以匹配MYSQL服務器?
- 11. 無論何時區,以UTC格式獲取設備時間
- 12. UTC在不同時區的服務器上的時間不同?
- 13. 如何在c#中獲取用戶本地機時區#
- 14. 如何獲取用戶的時區?
- 15. 檢測用戶時區並顯示該時區的UTC時間
- 16. 使用休眠時以UTC時區獲取日期
- 17. 如何將MySQL服務器時區設置爲UTC?
- 18. 獲取UTC與給定時區的小時差與Python
- 19. 如何獲得像服務器時區的服務器國家
- 20. MySQL UTC到當地時區
- 21. MySQL:保持服務器時區或用戶時區?
- 22. 使用本地時區在Python中獲取正確的時區偏移量
- 23. 將Qt本地時區強制爲UTC
- 24. 如何獲取用戶的本地時間而不是服務器的時間?
- 25. 以mysql格式獲取不同時區的UTC時間
- 26. PHP UTC時區
- 27. JavaScript:使用時區將UTC時間轉換爲本地時間
- 28. 在服務器上獲取客戶端時區信息
- 29. UTC和Etc/UTC時區有區別嗎?
- 30. Web和數據庫服務器設置以獲得UTC時區「正確」
這是您如何在純Python中進行時區轉換的一個例子,但OpenERP建議採用這種方式來做到這一點,並指出什麼時候有意義(請參閱我的回答) – odony