3

重複の可能性:
Python の datetime オブジェクトが間違ったタイムゾーン オフセットを表示する

pytzライブラリ(最終バージョン2012h)を使用して、Pythonでタイムゾーン間の変換に問題があります。ここブリュッセルでは通常、冬は UTC+1 時間、夏は UTC+2 時間です。

私は次のコードを持っています:

from datetime import datetime

import pytz

brussels_tz = pytz.timezone('Europe/Brussels')
utc_tz = pytz.utc

def main():
    intermdate = datetime(2012, 07, 15, 8, 0, 0, 0, brussels_tz)
    utcdate = intermdate.astimezone(utc_tz)
    print "Brussels time is %s" % intermdate
    print "UTC time is %s" % utcdate

if __name__ == '__main__':
    main()

問題は、次の結果が得られることです。

Brussels time is 2012-07-15 08:00:00+00:00
UTC time is 2012-07-15 08:00:00+00:00

だから違いはありません。私の意見では、結果は(夏に)次のようになります。

Brussels time is 2012-07-15 08:00:00+02:00
UTC time is 2012-07-15 06:00:00+00:00

ヨーロッパ/パリのタイムゾーン (通常はブリュッセルと同じ時間) を使用すると、さらに奇妙な結果が得られます。

Paris time is 2012-07-15 08:00:00+00:09
UTC time is 2012-07-15 07:51:00+00:00

なんと9分差!?

誰でも私を助けることができますか?

4

1 に答える 1

9

.localize()メソッドを使用して日時をタイムゾーンに移動する必要があります。

intermdate = brussels_tz.localize(datetime(2012, 07, 15, 8, 0, 0, 0))
utcdate = intermdate.astimezone(utc_tz)

出力は次のとおりです。

Brussels time is 2012-07-15 08:00:00+02:00
UTC time is 2012-07-15 06:00:00+00:00

pytzドキュメントを参照してください:

残念ながら、標準の日時コンストラクターの tzinfo 引数を使用すると、多くのタイムゾーンの pytz で「機能しません」。

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 AMT+0020'
于 2012-11-11T15:30:41.060 に答える