将时间戳从dateutil从utc更改为not utc

时间:2018-11-23 16:49:06

标签: python python-dateutil

存在的事物

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`?

预先感谢

2 个答案:

答案 0 :(得分:1)

您要使用datetime.datetime的{​​{3}}方法。如果您在任何时区(例如 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)

答案 1 :(得分:0)

Paul显示的astimezone()方法将调整日期和时间以匹配新时区。 通常这就是您想要的。例如,如果您拥有的时间戳是UTC,并且想要将其转换为UTC + 1(或任何其他时区),那么您需要添加一个小时(或执行其他一些算术运算),astimezone()会为您完成。它还照顾夏时制或夏令时,以及许多more substantial时区不规则性。

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

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