将 dateutil 中的时间戳从 utc 更改为非 utc

Change timestamp from dateutil from utc to not utc

存在什么

import datetime
import dateutil.parser
import time

timestamp = dateutil.parser.parse(response["body"]["inserted_at"])

有什么问题
这个时间戳是 UTC,但它应该是 UTC+1,或者 TimeZone Europe,Zurich

问题
我应该在现有代码中添加什么以获得时间戳as Europe,Zurich, and no moreUTC`?

提前致谢

您想使用 datetime.datetimeastimezone 方法。如果您在任何时区都有日期时间(e G。 UTC) 并希望它在另一个区域,您使用 dt_new_tz = dt_old_tz.astimezone(new_tz)

在这种情况下,您需要:

from dateutil import tz
zurich_tz = tz.gettz("Europe/Zurich")
new_ts = timestamp.astimezone(zurich_tz)

Paul 展示的 astimezone() 方法将调整日期和时间以匹配新时区。 这通常是您想要的。例如,如果您的时间戳是 UTC,并且您想将其转换为 UTC+1(或任何其他时区),那么您需要添加一个小时(或做一些其他算术),astimezone() 为你做。它还处理夏令时或夏令时,以及许多 more substantial 时区不规则问题。

然而,有时这并不是你想要的。例如,如果您有一个错误标记为 UTC 的 UTC+1 时区,则 astimezone() 将增加一个小时,生成一个错误标记为 UTC+1 的 UTC+2 日期时间。如果这描述了您的问题,那么您应该使用 replace() 方法而不是 astimezone()。这将简单地 "relabel" 时区而不进行任何转换算术。例如,它将 14:00 UTC 转换为 14:00 UTC+1。如果您的时间戳没有时区信息,或者解析器不够智能,无法理解给定的时区信息,这将非常有用。

(你需要知道你有这两个问题中的哪一个。无法自动判断你的datetime对象是否有"right"时区信息,因为Python无法猜测你的意图。 )