openerp7 时区问题解决--改成本地时区
2014-04-29 16:08 折翼的鸟 阅读(504) 评论(0) 编辑 收藏 举报由于目前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的调用方式,不然会出错,具体错误原因,请猛戳: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');
未完待续...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构