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

16

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

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

我希望将其转换为显示时区偏移量+1000

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

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

更新

谢谢Cixate。我刚刚找到了与你的方法非常相似的解决方法。这些链接对我很有帮助 - 链接1链接2

为了方便大家,我把解决方案发布在此处。

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的建议。 - wberry
1个回答

14

datetime.astimezone 方法可以帮助你完成基本的转换,前提是你已经有一个 datetime 对象。如果你想将字符串转换为 datetime 对象,请安装 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)”检索时区信息吗? - Angela
在你的例子中,你想要将偏移量翻译为“+1000”,不幸的是我把它读成了“+0100”,但原则是相同的。tzoffset()的第一个参数是名称,如果你不关心它,可以设置为None。第二个参数是与UTC的偏移量(以秒为单位)。因此,1小时为3600秒,10小时为36000秒。 - six8
感谢Cixate的解释。 - Angela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接