天天看点

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‘);

未完待续...