2017-02-06 2 views
2

Pythonで異なるタイムゾーンでdatetimeを差分するときに、有効なtimedeltaインスタンスを取得するにはどうすればよいですか?タイムゾーンが異なる場合、タイムデルタは常に0になっています。Pythonで異なるタイムゾーンを持つdatetimes間のtimedeltaを計算する方法

>>> from dateutil.parser import parse 
>>> dt0=parse('2017-02-06 18:14:32-05:00') 
>>> dt0 
datetime.datetime(2017, 2, 6, 18, 14, 32, tzinfo=tzoffset(None, -18000)) 
>>> dt1=parse('2017-02-06 23:14:32+00:00') 
>>> dt1 
datetime.datetime(2017, 2, 6, 23, 02, 12, tzinfo=tzutc()) 
>>> (dt1-dt0).total_seconds() 
0.0 

これは私には意味がありません。 Pythonのdatetimeクラスは、両方の値を内部的にUTCに正規化し、それらの値に基づいてtimedeltaを返すのに十分なほどスマートになると思っていたでしょう。または例外をスローします。代わりに0を返し、両方の日付時刻が等しいことを意味します。明らかにそうではありません。私はここで間違って何をしていますか?

+3

「18:14:32 -05:00」と「23:14:32 + 0」*は等しくなります。 5時間の違いがありますが、これもタイムゾーンの違いです。 – RemcoGerlich

+1

あなたの文字列と 'dt1'はお互いに一致しません。時間がちょうど5時間離れていて、タイムゾーンも同じであれば、その違いがゼロになるとは思わないでしょうか? –

答えて

1

タイムゾーンが何を意味するのか混乱しています。あなたが与えた2回は同一であるので、もちろん違いはゼロです。

>>> from dateutil.parser import parse 
>>> dt0=parse('2017-02-06 18:14:32-05:00') 
>>> dt0 
datetime.datetime(2017, 2, 6, 18, 14, 32, tzinfo=tzoffset(None, -18000)) 
>>> dt1=parse('2017-02-06 23:14:32+00:00') 
>>> dt1 
datetime.datetime(2017, 2, 6, 23, 14, 32, tzinfo=tzutc()) 
>>> (dt1-dt0).total_seconds() 
0.0 

しかし、私はUTCへdt0を変換するときに何が起こるか見て:私は、私はあなたが持っている2番目の文字列と第二datetimeの間に矛盾がないことを除いて、あなたの結果を再現することができます。時間は5時間のタイムゾーンの差によって調整され、2番目のタイムゾーンと同じになります。

>>> dt0.astimezone(dt1.tzinfo) 
datetime.datetime(2017, 2, 6, 23, 14, 32, tzinfo=tzutc()) 
関連する問題