【问题标题】:why datetime showed not like in the DB?为什么日期时间在数据库中显示不一样?
【发布时间】:2016-05-03 14:59:53
【问题描述】:

我在数据库中有以下几行

id |  date_order    |  name | origin

----+---------------------+----------+---------

38 | 2016-05-10 14:00:00 | OT/00024 | GI/00005:

39 | 2016-05-26 14:00:00 | OT/00025 | GI/00005:

40 | 2016-06-11 14:00:00 | OT/00026 | GI/00005:

41 | 2016-06-27 14:00:00 | OT/00027 | GI/00005:

42 | 2016-07-13 14:00:00 | OT/00028 | GI/00005:

但它在视图中显示为:

date_order          |   name   | origin

--------------------+----------+-------------

10/05/2016 15:00:00 | OT/00024 | GI/00005:

26/05/2016 15:00:00 | OT/00025 | GI/00005:

11/06/2016 14:00:00 | OT/00026 | GI/00005:

27/06/2016 14:00:00 | OT/00027 | GI/00005:

13/07/2016 15:00:00 | OT/00028 | GI/00005:

我更改了时区,但我仍然知道差异

【问题讨论】:

    标签: datetime view openerp odoo-8 display


    【解决方案1】:

    当你存储datetime时,你应该使用这样的上下文:

    from openerp.osv import fields
    from datetime import datetime
    ...
    my_date = fields.datetime.context_timestamp(cr, uid, datetime.now(), context=context)
    

    数据库中存储的日期是 UTC (GMT-0) 时区。假设这个人的时区设置为 GMT - 5:00,那么在将值存储到数据库时,日期将增加 5 小时(正好是 5,不是多一点或少一点),因此我们得到 UTC 时间存入数据库。现在,当显示相同时,它将检查用户时区,并发现其 GMT - 5:00,因此数据库时间将减去 5(同样是 5,不多不少)并显示给用户。

    这对于在不同时区使用的系统非常有用。所以理解是输入是在存储在 UTC(GMT-0) 中的用户时区中进行的,并显示到用户的时区(即使用户查看的是不同的时区,时间也会准确到他们的时区)

    【讨论】:

    • cr、uid 和 context 未定义
    • 当然,这是代码的一部分,它展示了如何在方法中使用! (所以不是字段定义)
    【解决方案2】:

    Odoo 将日期时间字段显示为 TIMEZONE,在这种情况下,时区为 GMT+1,但由于斋月,6 月将是 GMT+0,这就是原因

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2013-01-23
      • 2010-11-13
      相关资源
      最近更新 更多