2012-11-20 28 views
6

在OpenERP中,當我嘗試打印當前的日期和時間時,它總是打印'UTC'時間。但我想在用戶時區中獲得時間。每個用戶有不同的時區。 For example 'CST6CDT','美國/太平洋'或'亞洲/加爾各答'。所以我需要花時間在用戶時區,以便我可以在報告中顯示正確的日期時間。我試圖在datatime模塊中使用localize()和replace()函數更改時區。但是我沒有得到正確的輸出。如何獲取除python服務器時區(UTC)以外的用戶本地時區?

回答

9

明白了。

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/

+0

這是您如何在純Python中進行時區轉換的一個例子,但OpenERP建議採用這種方式來做到這一點,並指出什麼時候有意義(請參閱我的回答) – odony

3

作爲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 918257bug 925361

+0

感謝Odony。我想將時區傳遞給我的碧玉報告。它沒有正確傳遞給碧玉服務器。所以我把當地時間通過了碧玉報告 – OmaL

0

來自: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) 
0

DateInUTC = <〜時間變量

轉換要轉換到用戶的時區:

LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context) 

以消除失調:

LocalizedDate = LocalizedDate.replace(tzinfo=None) 
相關問題