2017-08-11 72 views
0

我怎样才能和我的系统一样?

create_date = fields.Datetime(default=fields.Datetime.now, string='Creation Date', readonly=True, index=True)

如果我在窗体上显示它它给了我,例如系统确切时间,如果现在是2017年11月8日15:12:00在表单上我看到相同的,但问题是,当我用它做什么,它认为它像2017年11月8日14时12分〇〇秒

例如:

@api.onchange('name') 
 
    def onchange_name(self): 
 
     if self.name: 
 
      raise exceptions.except_orm(_('test'), _(self.create_date))

它显示2017年8月11日14时12分○○秒

注: 在国内我们是UTC + 1

+0

的时候我的机器上是UTC + 1 – Borealis

+0

odoo的形式将显示UTC + 1,但如果我想要做一个处理它,它认为它作为只是UTC – Borealis

回答

0

Odoo总是存储在日期时间UTC,并将其转换到时区的用户在视图上(以支持多时区)。您必须将日期时间转换为您的时区。你可以,可以尝试一下:(未测试:))

from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT 
import pytz 

@api.onchange('name') 
def onchange_name(self): 
    if self.name: 
     if self.env.user.tz: 
      user_tz = pytz.timezone(self.env.user.tz) 
      utc_create_date = datetime.strptime(self.create_date, DEFAULT_SERVER_DATETIME_FORMAT) 
      create_date = pytz.utc.localize(utc_create_date, is_dst=None).astimezone(user_tz) 
      raise exceptions.except_orm(_('test'), create_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)) 
     raise exceptions.except_orm(_('test'), self.create_date) 
+0

感谢您的答案。我测试了它不起作用。 – Borealis

+0

即使我尝试在如果self.env.user.tz之后引发exceptions.except_orm(_('test'),“second if”)。它不显示任何东西,它就像没有进入这种状态 – Borealis

+0

你是否在Odoo中设置时区? – qvpham