Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

解决Odoo8.0单时区应用中的时区问题



  • 由于数据库中存储的是UTC时区,默认情况下数据导出和group by都存在时区问题。<br />解决办法:[b]将以UTC时区存储的数据改为按目标时区存储,并去掉JS中的时区转换[/b]。<br /><br />1、修改Odoo系统环境时区:<br />odoo/openerp/init.py 文件<br />import os<br />os.environ['TZ'] = 'UTC' # 将这里的UTC 改为Asia/Shanghai 或其它目标时区<br /><br />2、修改 web页面时区转换的JS文件:<br />odoo/addons/web/static/src/js/openerpframework.js 中的两个方法<br />openerp.str_to_datetime  字符串转时间<br />openerp.datetime_to_str  时间转字符串<br />去掉这两个方法中的UTC字符。<br /><br />3、修改以UTC时间执行的SQL 查询或插入语句:<br />去掉所有带 "at time zone 'UTC'" 或 "at time zone 'utc'"字符串的语句。<br /> odoo/openerp/models.py 特别是create_date、write_date字段值;<br /> odoo/openerp/addons/base/ir/ir_cron.py  定时任务中UTC时区改为当前时区;<br /> odoo/openerp/netsvc.py  备份下来的数据库名称时间标志<br /><br />4、修改其他功能性模块中带 "at time zone" 字符串来取UTC时间的语句。<br /> 如 calendar 模块和 hr_timesheet_sheet模块



  • 由于数据库中存储的是UTC时区,默认情况下数据导出和group by都存在时区问题。<br />解决办法:[b]将以UTC时区存储的数据改为按目标时区存储,并去掉JS中的时区转换[/b]。<br /><br />1、修改Odoo系统环境时区:<br />odoo/openerp/init.py 文件<br />import os<br />os.environ['TZ'] = 'UTC' # 将这里的UTC 改为Asia/Shanghai 或其它目标时区<br /><br />2、修改 web页面时区转换的JS文件:<br />odoo/addons/web/static/src/js/openerpframework.js 中的两个方法<br />openerp.str_to_datetime  字符串转时间<br />openerp.datetime_to_str  时间转字符串<br />去掉这两个方法中的UTC字符。<br /><br />3、修改以UTC时间执行的SQL 查询或插入语句:<br />去掉所有带 "at time zone 'UTC'" 或 "at time zone 'utc'"字符串的语句。<br /> odoo/openerp/models.py 特别是create_date、write_date字段值;<br /> odoo/openerp/addons/base/ir/ir_cron.py  定时任务中UTC时区改为当前时区;<br /> odoo/openerp/netsvc.py  备份下来的数据库名称时间标志<br /><br />4、修改其他功能性模块中带 "at time zone" 字符串来取UTC时间的语句。<br /> 如 calendar 模块和 hr_timesheet_sheet模块



  • 1、写死成 Asia/Shanghai,这个只适合中国用户,此方案永远无法并入 odoo,只能留在openerp-china<br /><br />2、针对已有生产数据的情形,应用此方案前后会有一个数据差异,可能需要一个转换脚本<br /><br />Rogan 威武!



  • 以上方案只适合一个时区的用户,能解决其时区问题。<br /><br />对于多时区,导出数据的时区问题解决方案是:[b]在导出时进行时区转换[/b]!<br />class Datetime(Datetime):<br /><br />    def convert_to_export(self, value, env):<br />        """ convert value from the cache to a valid value for export. The<br />            parameter env is given for managing translations.<br />        """<br />        #将存储在数据库中的UTC时区的datetime字段转换成用户本机时区<br />        value_datetime = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")<br />        current_timezone = env.context.get('tz', False)<br />        current_tz = pytz.timezone(current_timezone)<br />        utc_tz = pytz.timezone('UTC')<br />        utc_tz_datetime = utc_tz.localize(value_datetime, is_dst=None)<br />        value = utc_tz_datetime.astimezone(current_tz)<br /><br />        if env.context.get('export_raw_data'):<br />            return value<br />        return bool(value) and ustr(value)<br /><br />有解决多时区group by问题的大侠请不吝赐教!



  • [quote author=Jeff link=topic=17001.msg29995#msg29995 date=1422782945]<br />1、写死成 Asia/Shanghai,这个只适合中国用户,此方案永远无法并入 odoo,只能留在openerp-china<br /><br />2、针对已有生产数据的情形,应用此方案前后会有一个数据差异,可能需要一个转换脚本<br /><br />Rogan 威武!<br />[/quote]<br /><br />不求并入Odoo,只求国内单时区用户不再抱怨~ ;D<br />已有数据的生产环境“请遵医嘱”。


  • 管理员

    我不太喜欢你的彻底解决的方法和标题



  • [quote author=digitalsatori link=topic=17001.msg30005#msg30005 date=1422842528]<br />我不太喜欢你的彻底解决的方法和标题<br />[/quote]<br /><br />求大牛更好的方案啊。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待