由于目前openerp的時區,讀取的是utc時間,而我國本地時間比utc快8小時
問題就導緻,寫入資料庫的時候時間相差8小時,以及openerp日志輸出時間格式也相差8小時和前端顯示問題
1、更改openerp日志輸出時間,如:

修改檔案: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‘)
如:
隻是針對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‘);
未完待續...