1

タイムゾーンを処理する必要がある Python (Python 2.7.4 (デフォルト、2013 年 4 月 6 日、19:54:46) [MSC v.1500 32 ビット (Intel)] on win32、Windows 7) コードを書いています。このために、私はpytzライブラリ(2012dバージョン)を使用しています。これは、安全のために、easy_installを使用して更新したばかりです。

特に、中国の四川省成都での時間を表現する必要があります。これは「アジア/重慶」タイムゾーンで、「ヨーロッパ/ロンドン」(私のローカル タイムゾーン) よりも +07:00 時間進んでいる必要があります。

何らかの理由で、「Asia/Chonqing」ゾーンで datetime.datetime を作成すると、適用されるオフセットは +07:06 であり、予想される +07:00 ではありません。しかし、別のゾーン (ニューヨークなど) で datetime.datetime を作成すると、問題なく動作します。

pytz データベースは正しいと思いますが、何が間違っているのでしょうか? 私はどんな提案にも感謝します。

"""
Fragment of code for messing about with (foreign)
time-zones and datetime/ephem
"""

import datetime
import pytz

ChengduTZ = pytz.timezone('Asia/Chongqing')
ParisTZ   = pytz.timezone('Europe/Paris')
LondonTZ  = pytz.timezone('Europe/London')
NewYorkTZ = pytz.timezone('America/New_York')

MidnightInChengdu = datetime.datetime(2013, 6, 5, 0, 0, 0, 0, ChengduTZ)
MidnightInNewYork = datetime.datetime(2013, 6, 5, 0, 0, 0, 0, NewYorkTZ)

print("When it's midnight in Chengdu it's:")
print(MidnightInChengdu)
print(MidnightInChengdu.astimezone(LondonTZ))
print(MidnightInChengdu.astimezone(ParisTZ))
print(MidnightInChengdu.astimezone(NewYorkTZ))

print("\nWhen it's midnight in New York it's:")
print(MidnightInNewYork)
print(MidnightInNewYork.astimezone(LondonTZ))
print(MidnightInNewYork.astimezone(ParisTZ))
print(MidnightInNewYork.astimezone(ChengduTZ))

次の出力が生成されます。

When it's midnight in Chengdu it's:
2013-06-05 00:00:00+07:06
2013-06-04 17:54:00+01:00
2013-06-04 18:54:00+02:00
2013-06-04 12:54:00-04:00

When it's midnight in New York it's:
2013-06-05 00:00:00-05:00
2013-06-05 06:00:00+01:00
2013-06-05 07:00:00+02:00
2013-06-05 13:00:00+08:00
4

1 に答える 1

3

メソッドを使用して日時を正しいタイムゾーンに入れる必要があります.localize()。そうしないと、誤って過去のオフセットが選択されます。

ChengduTZ = pytz.timezone('Asia/Chongqing')
MidnightInChengdu = ChengduTZ.localize(datetime.datetime(2013, 6, 5, 0, 0, 0, 0))
MidnightInNewYork = NewYorkTZ.localize(datetime.datetime(2013, 6, 5, 0, 0, 0, 0))

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

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

この変更により、出力は次のようになります。

When it's midnight in Chengdu it's:
2013-06-05 00:00:00+08:00
2013-06-04 17:00:00+01:00
2013-06-04 18:00:00+02:00
2013-06-04 12:00:00-04:00

When it's midnight in New York it's:
2013-06-05 00:00:00-04:00
2013-06-05 05:00:00+01:00
2013-06-05 06:00:00+02:00
2013-06-05 12:00:00+08:00

ニューヨークのオフセットも正しくないことに注意してください。

于 2013-06-04T11:18:56.163 に答える