Python pytz Преобразование временной метки (строковый формат) из одного часового пояса в другой - PullRequest
12 голосов
/ 07 сентября 2011

У меня есть временная метка с информацией о часовом поясе в строковом формате, и я хочу преобразовать ее, чтобы отображать правильную дату / время с использованием моего местного часового пояса. Так, например, у меня есть

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

и я хотел бы преобразовать это, чтобы сказать смещение часового пояса +1000 к dsiplay

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

Я пытался использовать pytz, но не смог найти много примеров, показывающих, как использовать информацию о смещении. Еще одна ссылка, которую я нашел в stackoverflow, которая описывает эту точную проблему, это здесь . Я надеялся, что есть какой-то лучший способ справиться с этим, используя pytz. Спасибо за все предложения заранее:).

UPDATE

Спасибо, 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

1 Ответ

10 голосов
/ 07 сентября 2011

datetime.astimezone выполнит базовое преобразование, если у вас есть объект datetime. Если вы пытаетесь получить объект datetime из строки, установите pip 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...