2012-11-12 15 views
8

datetimeをUTCとして格納するデータベースがあります。私は特定の時間から情報を調べる必要がありますが、現地時間で日付と時刻が与えられます、 'Europe/Copenhagen'としましょう。私はこれらを次のように指定しています:Python pytz:現地時間をutcに変換します。ローカライズが変換されないようです

year = 2012; month = 12; day = 2; hour = 13; min = 1; 

私はこれらをデータベースで検索できるように変換する必要があります。私はpytzを使ってこれをしたいと思います。

local_tz = timezone('Europe/Copenhagen') 
t = local_tz.localize(datetime.datetime(year, month, day, hour, min)) 

しかし、私はlocalize()について困惑している:私はlocalizeで探しています。これは、その年などが現地時間に私に与えられていると仮定していますか?あるいは、彼らはUTCで与えられていると仮定していますが、今は現地時間に変換していますか?

print tは私を与える:

2012-12-02 13:01:00+01:00 

だから、それが本来の年ということを想定しているようです、などUTCでした。時間は13時でなく13時です。代わりに何をすべきですか?私はpytzのドキュメントを読んだが、これは私には分かりません。物事は難しいので、ピッツが実際にこれらの問題を解決しているかどうかはわかりません。そして、私は、例が私に働くものやうまくいかないものを示しているかどうかを常に知るわけではありません。

print local_tz.normalize(t) 

私のプリントTと同じ結果が得られます。

私は正規化を試してみました。

編集:上記の数字などは、2012-12-2 12:01のデータベースの情報と一致する必要があります。

答えて

16

localize()ローカルタイムゾーンでナイーブdatetime.datetimeインスタンスにタイムゾーンを取り付ける(コペンハーゲンため、その日にUTC + 1)。

ローカルタイムゾーンの日時値を持っている場合は、その時間帯に局在し、UTCに値をキャストする.astimezone()を使用します。あなたがこれを行うにはない必要を行う

>>> localdt = local_tz.localize(datetime.datetime(year, month, day, hour, min)) 
>>> localdt.astimezone(pytz.UTC) 
datetime.datetime(2012, 12, 2, 12, 1, tzinfo=<UTC>) 

注意、datetimeオブジェクトとタイムゾーンを比較できます。彼らは両方のテストのためにUTCに正規化できるでしょう:

>>> localdt.astimezone(pytz.UTC) == localdt 
True 
+0

時間は14:01:00 + 01:00となります。正しいローカル時刻は13、utc時刻は12です。 – user984003

+0

@ user984003:ああ、申し訳ありませんが、最初の文章を誤読しました。 '.astimezone()'はまだまだやり方です。 –

+0

はい、その2番目の方法は、ありがとうございます。あなたはあなたの答えにそれを持っていてもらえますか、そうでなければ少し混乱していると思います;)私は印刷された日付について混乱していたことがわかります。 "+01:00"は、それがutcよりも1時間先であることを示しています。時間に1時間を追加する必要はありません。 – user984003

0

あなたは表現がEurope/Copenhagenタイムゾーンである、着信時間を知っている場合、あなたはタイムゾーンを意識して開始すると、それを作成することができます。

local_tz = timezone('Europe/Copenhagen') 
t = local_tz.localize(datetime.datetime(year, month, day, hour, min)) 

あなたは、その後でUTCにこれを「変換」することができます

t_utc = t.astimezone(pytz.UTC) 

が、これはあなたのデータベースドライバはどのように正気に応じて、必要ではないかもしれません。 tおよびt_utcは、同じの時点を表します.とよく動作するコードでは、それらを同じ意味で扱う必要があります。タプルは、特定のタイムゾーンおよびカレンダーシステムで、この時点を人間が読める形式で表したものに過ぎません。

関連する問題