タイプを持つ2つの時間値がありますdatetime.time
。私はそれらの違いを見つけたい。明らかにすべきことは t1 - t2 ですが、これはうまくいきません。タイプのオブジェクトでは機能しますが、 では機能datetime.datetime
しませんdatetime.time
。では、これを行う最善の方法は何ですか?
7 に答える
これも少しばかげていますが、任意の日を選択して、毎回 を使用してその中に埋め込んでから、次のようdatetime.datetime.combine
に減算してみることができます。
>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)
両方をtimedelta オブジェクトに変換し、これらを互いに差し引くことができます。これにより、キャリーオーバーが処理されます。例えば:
>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>> print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00
Python の負の timedelta オブジェクトは負の day フィールドを取得し、他のフィールドは正になります。事前に確認できます: 比較は time オブジェクトと timedelta オブジェクトの両方で機能します:
>>> dt2 < dt1
True
>>> t2 < t1
True
Pythonには、「時間」オブジェクトの演算に使用できるpytz(http://pytz.sourceforge.net )モジュールがあります。DSTオフセットも処理します。上記のページには、pytzの使用法を説明するいくつかの例があります。
datetime.time のオーバーフローを処理する良い方法がないため、これはサポートされていないようです。これが直接の答えではないことはわかっていますが、私よりもPythonの経験が豊富な人なら、これをもう少し進めることができます。詳細については、http: //bugs.python.org/issue3250を参照してください。
ミリ秒単位で時間を取得してから、減算を実行します。
まず、datetime.time は特定の日付とは無関係の時刻であるため、2 つの datetime.time 値の差は 24 時間未満になることに注意してください。
1 つの方法は、両方の datetime.time 値を同等の値 (ミリ秒など) に変換し、その差を見つけることです。
t1, t2 = datetime.time(...), datetime.time(...)
t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond
delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])
それは少し不自由ですが、うまくいきます。
何か手っ取り早いものが必要な場合は、 Environment.TickCount がうまく機能するようです。
int start = Environment.TickCount
...何かをする()
int 経過時間 = Environment.TickCount - 開始
ジョン