Python 将时间戳从dateutil从utc更改为非utc

Python 将时间戳从dateutil从utc更改为非utc,python,python-dateutil,Python,Python Dateutil,存在什么 import datetime import dateutil.parser import time timestamp = dateutil.parser.parse(response["body"]["inserted_at"]) 有什么问题 此时间戳为UTC,但应为UTC+1,或苏黎世欧洲时区 问题 我应该在现有代码中添加什么,以使时间戳成为欧洲、苏黎世,而不再是UTC` 提前感谢您想使用datetime.datetime的方法。如果您在任何时区都有datetime(e g、

存在什么

import datetime
import dateutil.parser
import time

timestamp = dateutil.parser.parse(response["body"]["inserted_at"])
有什么问题
此时间戳为
UTC
,但应为
UTC+1
,或苏黎世欧洲时区

问题
我应该在现有代码中添加什么,以使时间戳
成为欧洲、苏黎世,而不再是UTC`

提前感谢

您想使用
datetime.datetime的方法
。如果您在任何时区都有datetime(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)
您想使用
datetime.datetime
的方法。如果您在任何时区都有datetime(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()
可以为您提供此功能。它还负责夏令时或夏令时,以及许多时区异常

然而,有时这不是你想要的。例如,如果有一个UTC+1时区被错误地标记为UTC,则
astimezone()
将增加一个小时,生成一个UTC+2日期时间,该时间被错误地标记为UTC+1。如果这说明了您的问题,那么您应该使用该方法,而不是
astimezone()
。这将简单地“重新标记”时区,而无需执行任何转换算法。例如,它将14:00 UTC转换为14:00 UTC+1。当您的时间戳没有时区信息,或者解析器不够聪明,无法理解给定的时区信息时,这非常有用

(您需要知道这两个问题中的哪一个。无法自动确定datetime对象是否具有“正确”的时区信息,因为Python无法猜测您的意图。)

Paul显示的
astimezone()
方法将调整日期和时间以匹配新时区这通常是您想要的。例如,如果您拥有的时间戳是UTC,并且您希望将其转换为UTC+1(或任何其他时区),那么您需要添加一个小时(或执行一些其他算术运算),而
astimezone()
可以为您提供此功能。它还负责夏令时或夏令时,以及许多时区异常

然而,有时这不是你想要的。例如,如果有一个UTC+1时区被错误地标记为UTC,则
astimezone()
将增加一个小时,生成一个UTC+2日期时间,该时间被错误地标记为UTC+1。如果这说明了您的问题,那么您应该使用该方法,而不是
astimezone()
。这将简单地“重新标记”时区,而无需执行任何转换算法。例如,它将14:00 UTC转换为14:00 UTC+1。当您的时间戳没有时区信息,或者解析器不够聪明,无法理解给定的时区信息时,这非常有用


(您需要知道这两个问题中的哪一个。无法自动确定datetime对象是否具有“正确”的时区信息,因为Python无法猜测您的意图。)

响应[“正文”][“插入”]
的值是多少?大概是某个包含时间戳的字符串。。。它是否有时区?在该时间段中是UTC,
响应[“body”][“inserted_at”]
的值是多少?大概是某个包含时间戳的字符串。。。它里面有时区吗?时间戳里面是UTC。如果时间戳包含准确的时区,解析器做的是正确的。@Paul:正如我所说的,
astimezone()
通常是正确的用法。感谢Kevin提供更好的理解知识。如果时间戳包含准确的时区,解析器做了正确的事情。@Paul:正如我所说的,
astimezone()
通常是正确的使用方法。感谢Kevin提供的知识,让他更好地理解。谢谢Paul。这是复制粘贴解决方案,效果非常好。谢谢你,保罗。这是复制粘贴解决方案,工作完美。