2011-09-07 14 views
8

私はタイムゾーン情報を文字列形式で持つタイムスタンプを持っており、これを変換して自分のローカルタイムゾーンを使って正しい日時を表示したいと思います。だから、例えばのために...私はPython pytzあるタイムゾーンから別のタイムゾーンにタイムスタンプ(文字列形式)を変換する

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

を持っていると私は、これはタイムゾーンがpytzを使用して、私が試してみました

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

dsiplayする+1000オフセットが、どのように多くの例が示す見つけるcouldntの言うことを変換したいですオフセット情報を使用します。この正確な問題を示すstackoverflowで見つけたもう一つのリンクはhereです。私はpytzを使ってこれを処理できるいくつかの良い方法があることを願っていました。すべての提案をお寄せいただきありがとうございます:)

UPDATE

おかげCixate。私はちょうどあなたと非常に似ている解決策を見つけました。これらのリンクが役に立ったと評価 - LINK1LINK2

あなたはdatetimeオブジェクトを持っていたら、everyonesの利益

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 
+0

あなたの最終的な解決策はCixateの提案に近いので、そのチェックボックスをクリックして、正しいとしてCixateの答えをマークすることを検討してください。 – wberry

答えて

9

datetime.astimezoneためのソリューションは、あなたの基本的な変換を行います投稿。あなたは、文字列から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)) 
+0

Thanks Cixate ..私はちょうどdateutil.parserとdatetime.astimezoneを使って解決策を得ました。私の解決策はあなたと少し違っています。私の無知を許してください。しかし、 "tzoffset(None、3600)"を使ってタイムゾーン情報を取得する方法を詳しく教えてください。 – Angela

+0

あなたの例では、 "+1000"のオフセットに翻訳したかったのですが、残念ながら "+0100 "しかし、プリンシパルは同じです。 tzoffset()の最初のパラメータは名前です。気にしない場合はNoneにすることができます。 2番目は秒単位のUTCからのオフセットです。 1時間3600、10時間36000です。 – six8

+0

説明のためにCixateに感謝します。 – Angela

関連する問題