標籤:http io os ar 檔案 資料 問題 sp on
由於目前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/Shanghai‘),%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的調用方式,不然會出錯,具體錯誤原因,請猛戳:http://stackoverflow.com/questions/12906402/type-object-datetime-datetime-has-no-attribute-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‘);
openerp7 時區問題