天天看點

openerp7 時區問題解決--改成本地時區

由于目前openerp的時區,讀取的是utc時間,而我國本地時間比utc快8小時

問題就導緻,寫入資料庫的時候時間相差8小時,以及openerp日志輸出時間格式也相差8小時和前端顯示問題

1、更改openerp日志輸出時間,如:

openerp7 時區問題解決--改成本地時區

修改檔案:oe_dev/openerp/__init__.py

os.environ[‘tz‘] = ‘utc‘

修改成:

os.environ[‘tz‘] = ‘asia/shanghai‘

2、修改資料寫入時間差問題

修改檔案:oe_dev/openerp/osv/orm.py

由于oe的資料庫model會預設建立create_date,wirte_date,而更改這兩處的隻有create和write方法,我們隻需要對這兩處的方法做下處理,(他們預設取的都是utc時間)

修改檔案行:4219

修改:

upd0.append("write_date=(now() at time zone

‘asia/shanghai‘)")

修改檔案行:4510

upd1 += ",%s,(now() at time zone

‘asia/taipei‘),%s,(now() at time zone ‘asia/shanghai‘)"

3、針對時間字段類型(date,datetime...)類型寫入資料庫時間差問題

修改檔案:oe_dev/openerp/osv/fields.py

在檔案頭增加:from datetime import datetime,timedelta

在4483檔案後增加

if self._columns[field]._type == ‘datetime‘:

datetime_type =

datetime.strptime(vals[field],‘%y-%m-%d %h:%m:%s‘) +

timedelta(hours=8)

vals[field] = datetime_type.strftime(‘%y-%m-%d

%h:%m:%s‘)

如:

openerp7 時區問題解決--改成本地時區

隻是針對datetime,date類型沒寫(懶得寫,反正現在也不用~~~orz....)

-----------------我是華麗的分割線--------------------

由于加載datetime和oe的源碼加載方式不一樣

oe: import datetime

修改:from datetime import datetime,timedelta

需要修改datetime的調用方式,不然會出錯,具體錯誤原因,請猛戳:

修改函數:_store_set_values (大概在4657行)

修改成:write_date =

datetime.fromtimestamp(time.mktime(res_date))  ,少一層調用

4、前端顯示問題,雖然資料庫裡面存的時間是對的,但是前端顯示時也會有時間差問題

修改檔案: oe_dev/openerp/addons/web/static/src/js/dates.js

修改第24行:

var obj = date.parseexact(res[1] + "

utc", ‘yyyy-mm-dd hh:mm:ss

zzz‘);

var obj = date.parseexact(res[1],

‘yyyy-mm-dd hh:mm:ss‘);

未完待續...