Python pytz 将时间戳(字符串格式)从一个时区转换为另一个时区

Posted

技术标签:

【中文标题】Python pytz 将时间戳(字符串格式)从一个时区转换为另一个时区【英文标题】:Python pytz Converting a timestamp (string format) from one timezone to another 【发布时间】:2011-11-11 19:40:21 【问题描述】:

我有一个带有字符串格式的时区信息的时间戳,我想将其转换为使用我的本地时区显示正确的日期/时间。所以例如......我有

timestamp1 = 2011-08-24 13:39:00 +0800

我想将其转换为时区偏移 +1000 到 dsiplay

timestamp2 = 2011-08-24 15:39:00 +1000

我尝试过使用 pytz,但找不到很多示例来展示如何使用偏移信息。我在 *** 上找到的另一个描述这个确切问题的链接是 here。我希望有更好的方法可以使用 pytz 来处理这个问题。提前感谢所有建议:)。

更新

感谢 Cixate。我刚刚找到了与您的解决方案非常相似的解决方案。发现这些链接很有帮助 - LINK1 和 LINK2

发布解决方案,让大家受益

from datetime import datetime
import sys, os
import pytz
from dateutil.parser import parse

datestr = "2011-09-09 13:20:00 +0800"
dt = parse(datestr)
print dt
localtime = dt.astimezone (pytz.timezone('Australia/Melbourne'))
print localtime.strftime ("%Y-%m-%d %H:%M:%S")
2011-09-09 15:20:00

【问题讨论】:

考虑通过单击复选框将 Cixate 的答案标记为正确,因为您的最终解决方案接近 Cixate 的建议。 【参考方案1】:

datetime.astimezone 将在您拥有日期时间对象后进行基本转换。如果您尝试从字符串中获取日期时间对象,请 pip install python-dateutil ,它很简单:

>>> from dateutil.parser import parse
>>> from dateutil.tz import tzoffset
>>> dt = parse('2011-08-24 13:39:00 +0800')
datetime.datetime(2011, 8, 24, 13, 39, tzinfo=tzoffset(None, 28800))
>>> dt.astimezone(tzoffset(None, 3600))
datetime.datetime(2011, 8, 24, 6, 39, tzinfo=tzoffset(None, 3600))

【讨论】:

谢谢 Cixate..我刚刚使用 dateutil.parser 和 datetime.astimezone 得到了解决方案。我的解决方案和你的有点不同。请原谅我的无知,但请您详细说明如何使用“tzoffset(None, 3600)”检索时区信息 在您的示例中,您想转换为“+1000”的偏移量,不幸的是我将其读为“+0100”,但主体是相同的。 tzoffset() 的第一个参数是一个名字,如果你不想知道它可以是 None 。第二个是与 UTC 的偏移量(以秒为单位)。所以 3600 1 小时或 36000 10 小时。 感谢 Cixate 的解释。

以上是关于Python pytz 将时间戳(字符串格式)从一个时区转换为另一个时区的主要内容,如果未能解决你的问题,请参考以下文章

使用 pytz 和 datetime 在 python 中获取 27/02/2019 00:00 US/Eastern 的时间戳

如何在 python 和 django 中使用 Pytz 根据给定的 UTC 偏移量转换数据和时间?

python / pytz问题从本地时区转换为UTC然后返回

在 Python 中使用 pytz 本地化纪元时间

将 Unix 时间戳转换为 AOE

django,python为啥本地化后时间戳会发生变化