将 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 more
UTC`?
提前致谢
您想使用 datetime.datetime
的 astimezone
方法。如果您在任何时区都有日期时间(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无法猜测你的意图。 )
存在什么
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 more
UTC`?
提前致谢
您想使用 datetime.datetime
的 astimezone
方法。如果您在任何时区都有日期时间(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无法猜测你的意图。 )