我有特定时区时间的日期,但系统将其作为UTC处理,稍后将其转换回该时区,弄乱时间。
例如:
我得到这个时间:2014-05-05 10:50:30
。它的日期时间对象。它没有时区信息,但我可以从使用该时间的用户获取时区信息。事情是这个时候被展示为' Europe / Vilnius'时间,但系统将其作为UTC处理,当它向用户输出时间时,它会增加+3小时显示错误的时间。如果我在该日期时间对象上将时区更改为用户时区并不重要,它仍会以+3小时输出。
例如(代码片段):
from datetime import datetime
import pytz
create_date = datetime.strptime(stage_log.create_date, "%Y-%m-%d %H:%M:%S")
tz = pytz.timezone(self.user_id.tz)
create_date = create_date.replace(tzinfo=pytz.utc)
这没有做任何事情,我仍然错误的时间。
有没有办法将时间移动到正确的UTC时间(以便系统正确转换为用户时区),如下所示:
2014-05-05 10:50:30
- >转换为UTC。如果时区是“欧洲/维尔纽斯”,则应将该时间转换为2014-05-05 07:50:30
。然后,当系统自动进行转换时,它会正确显示2014-05-05 10:50:30
,因为它应显示的时间。
此外,如果有一种方法可以获得给定时区与UTC不同的小时数,那么我可以这么简单:
create_date.replace(hour=create_date.hour-timezone_difference)
答案 0 :(得分:0)
虽然这个问题没有具体参考odoo,但希望以下内容可以帮助其他人:
Odoo - 将datetime转换为UTC: (注意:在此示例中,self.start_date是fields.Date)
start_date = fields.Datetime.to_string(pytz.timezone(self.env.context['tz']).localize(fields.Datetime.from_string(self.start_date), is_dst=None).astimezone(pytz.utc))
类似但是+24小时
end_date = fields.Datetime.to_string(pytz.timezone(self.env.context['tz']).localize(fields.Datetime.from_string(self.end_date), is_dst=None).astimezone(pytz.utc) + timedelta(hours=24))
使用它是因为传递的值(self.start_date)是field.Date,因此不会受到时区的影响,而目标存储的字段是fields.Datetime,因此存储在UTC中。
现在使用UTC的start_date / end_date可用于self.env ['']。search([])