很多人掉进了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. python-高级编程-06-长连接&连接池

    我们都知道tcp是基于连接的协议,其实这个连接只是一个逻辑上面的概念,在ip层来看,tcp和udp仅仅是内容上稍有差别而已. tcp 的连接仅仅是连接两端对于四元组和sequence号的一种约定而已 ...

  2. html 标签附加文本属性

    <!DOCTYPE html> <html> <head> <script> function showDetails(animal) { var an ...

  3. 如何用字体在网页中画icon

    一.用css雪碧图 1.简介 CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许将一个页面涉及到的所有零星图片都包含到一张大图中, 利用CSS的“background- ...

  4. mybatis分页方式对比

    mybatis有两种分页方法(转自:http://blog.csdn.net/leozhou13/article/details/50394242) 1.内存分页,也就是假分页.本质是查出所有的数据然 ...

  5. 【bzoj1014】[JSOI2008]火星人prefix Splay+Hash+二分

    题目描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 ...

  6. [luoguP3231] [HNOI2013]消毒(最小点覆盖 + 状压)

    传送门 考虑贪心,控制某一维为1,另两位最大是最优的,也就是一次选一个厚度为1的面 那么对于每个点,可以有3种面是可以选到它的 然后gg 考虑二维的状态,一个平面,有些点,一次选一行或一列最优 那么每 ...

  7. Spring之BeanFactory与ApplicationConText区别

    使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...

  8. svg优雅降级技术

    这是一个名叫Alexey Ten首先提出来的,类似下面的代码: <svg width="96" height="96"> <image xli ...

  9. 关于oracle 11g导出的dmp文件无法导入10g的问题

    今天遇到一个问题,由于无法远程11g是数据库服务器,只能用exp命令导出了一张表的dmp文件:在本地导入时遇到如下错误: IMP-00010: 不是有效的导出文件, 头部验证失败IMP-00000: ...

  10. windows.open 以post的方式传递参数

    今天看到有篇文章寫到 windows.open 可以post方式傳遞參數,就趕緊照作看看,結果是可行的,感謝撰寫這篇文章的作者~ /** * window.open with post method  ...