gpt4 book ai didi

Python - 将原始日期时间转换为 UTC

转载 作者:行者123 更新时间:2023-12-05 06:45:17 24 4
gpt4 key购买 nike

我有在特定时区时间获得的日期,但系统将其作为 UTC 处理,稍后又将其转换回该时区,时间一团糟。

例如像这样:

我得到这个时间:2014-05-05 10:50:30。它的日期时间对象。它没有时区信息,但我可以从使用该时间的用户那里获取时区信息。问题是这次显示为“欧洲/维尔纽斯”时间,但系统将其作为 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)

最佳答案

虽然这个问题没有具体提到 odoo,但希望以下内容可以帮助其他人:

Odoo - 将日期时间转换为 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 中。

然后可以在 self.env[''].search([]) 中使用现在采用 UTC 的开始日期/结束日期

关于Python - 将原始日期时间转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com