很多人掉进了odoo的时间坑

 
 

odoo约定关于日期的数据,存放在数据库时,以 utc0 时区也就是不带时区
存放,应用程序读取日期展示日期时,
转换成用户的时区展示

 
 

例如,stock picking 的
字段 date_done是
分拣完成时的
日期,
分拣完成时读取
系统时间,写入数据库
作为 date_done.. 代码是 self.write(cr, uid, [picking.id], {'date_done': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)

 
 

time.strftime() 读取odoo服务器的当前时间【带时区】,
如果服务器运行在 utc-8 ,则数据库存的日期也是 with utc-8,
也就是
下图示的前 2笔交易。

 
 

 
 

 
 

这样,
当用户从应用程序读取改数据时,
在此数据基础上 +时差,
变成了。

 
 

 
 

造成
时差 8 小时

 
 

 
 

原因是, odoo代码里面的相关
日期处理是
不正确的,
没有
遵循
在存数据前去掉
时区信息。

 
 

Odoo ORM自身处理是正确的,
参考
代码

 
 

但是
某些
应用程序里面
没有
处理正确,
例如 stock

 
 

@@ -506,7 +506,7 @@ def _quant_create(self, cr, uid, qty, move, lot_id=False, owner_id=False, src_pa

'qty': float_round(qty, precision_rounding=rounding),

'cost': price_unit,

'history_ids': [(4, move.id)],

- 'in_date': datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT),

+ 'in_date': datetime.utcnow().strftime(DEFAULT_SERVER_DATETIME_FORMAT),

'company_id': move.company_id.id,

'lot_id': lot_id,

'owner_id': owner_id,

 
 

 
 

在业务代码里
强制使用 utc-0 时区,能
解决此问题,

 
 

也可以
使用workaround 解决此问题,
那就是
将 odoo 服务器的时区设置为 utc -0

 
 

使用 dpkg-reconfigure tzdata 设置
时区

 
 

 
 

设置为 utc-0 之后的
测试

 
 

 
 

服务器设置为 utc-0 之后, datetime.datetime.now() 和 datetime.datetime.utcnow() 以及 time 获取的时间
都是
不带时区信息,
这样
就能
避免时差
问题。

 
 

 
 

odoo 的时差 坑的更多相关文章

  1. odoo 的时差 坑 [updated]

    很多人掉进了odoo的时间坑 odoo约定关于日期的数据,存放在数据库时,以 utc0 时区也就是不带时区存放,应用程序读取日期展示日期时,转换成用户的时区展示.用户的时区通过context传递. o ...

  2. Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)

    yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...

  3. 8.0/9.0 Email 设置

    Email 设置一直都是Odoo的一个坑,巨坑. 先讲结论,发邮件可以用,收还是算了吧 1. 发邮件设置 发的设置相对简单,如果企业邮箱支持catcll all功能,基本不用改动可以直接用,否则需要安 ...

  4. Odoo “坑” 系列之 XML中的布尔类型

    在Odoo中试图通过XML方式更新某条Record的值,却意外发现根本不能更新,经查,对于XML中Boolean类型的字段,更新的方式应该采用eval的方式.

  5. odoo开发笔记--日期or时间字段给定默认值

    开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...

  6. (20)odoo中的action

    ---------更新时间18:06 2016-09-18 星期日15:05 2016-03-14 星期一18:07 2016-02-19 星期五---------* 窗口动作   <?xml ...

  7. Windows Azure上的Odoo(OpenERP)-2.在Ubuntu虚拟机上部署Odoo(OpenERP)

    创建虚拟机的步骤在这里就不再赘述了,请参考上一篇博文. 首先用下述命令将Ubuntu系统进行更新: 1. sudo apt-get update 2. sudo apt-get upgrade 3. ...

  8. 记上海技术交流会之行备忘录(superset与odoo整合)

    像每个早上一样,早起跑步回来冲个热水澡,简单的吃下早饭,看书到8:50的样子,准备赶10:02分的火车.在我看到周总的微信时,我知道这将是一个新的起点,在自己过往的2年时间,将更多的精力和时间用在了英 ...

  9. MVC Json方法里的一个坑

    MVC Controller类下面有这样一个方法 // // Summary: // Creates a System.Web.Mvc.JsonResult object that serialize ...

随机推荐

  1. django自定义过滤器和标签

    1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...

  2. HTTP LVS

    1. Configure the director 2.

  3. [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决

    1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName>  或者/data/data/<pakeageName>找到插 ...

  4. 找不到css 路径问题

    今天进入一个网页的时候,一直报找不到css的错误,但是我的路径原来是正确的 后来找网络控制台,发现路径上多了一个listCommodity,是我controller里面的跳到这个页面的路径 然后我在& ...

  5. Linux Shell系列教程之(六)Shell数组

    本文是Linux Shell系列教程的第(六)篇,更多shell教程请看:Linux Shell系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,今天就为大家介绍下Shell数组的用法. ...

  6. d3 使用数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 2017.8.2 Noip2018模拟测试赛(十八)

     日期: 八月二日  总分: 300分  难度: 提高 ~ 省选  得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...

  8. SPOJ CIRU The area of the union of circles

    You are given N circles and expected to calculate the area of the union of the circles ! Input The f ...

  9. #pragma用法

    #pragma是一种预处理指令,作用是设定编译器的状态或者是指示编译器完成一些特定的动作. 其格式一般为:#pragma Para.其中Para为参数.下面是一些常见用法. 1.message ——在 ...

  10. Vbat 1.8V,接充電器,GPIO_CHG_EN pin 竟然是 high!

    Schematic : Precondition : Vbat 1.8V Plugin adapter Preloader doesn't enable GPIO_CHG_EN Origin : 做個 ...