Odoo 中时间相关的一些注意点

odoo数据库中存储默认为UTC标准时间,该时间如果直接用 sql 查出来看是比实际时间小8个小时的,
odoo的后台代码的计算、比较默认都是基于UTC时间,odoo框架在返回客户端时统一根据客户端时区做时区转化处理,如果我们自己写的API接口返回时间数据时则需要我们自行做下转化才是实际时间,代码如下:

  1. def dt_convert(value, return_format='%Y-%m-%d %H:%M:%S'):
  2. """
  3. UTC时间转为本地时间
  4. """
  5. if not value:
  6. return value
  7. if isinstance(value, datetime):
  8. value = value.strftime(return_format)
  9. dt = datetime.strptime(value, return_format)
  10. pytz_timezone = pytz.timezone('Etc/GMT-8')
  11. dt = dt.replace(tzinfo=pytz.timezone('UTC'))
  12. return dt.astimezone(pytz_timezone).strftime(return_format)

Odoo 不同版本 对于fields.Datetime 字段的表现有细微的区别,如下:


Related