13

タイプを持つ2つの時間値がありますdatetime.time。私はそれらの違いを見つけたい。明らかにすべきことは t1 - t2 ですが、これはうまくいきません。タイプのオブジェクトでは機能しますが、 では機能datetime.datetimeしませんdatetime.time。では、これを行う最善の方法は何ですか?

4

7 に答える 7

16

これも少しばかげていますが、任意の日を選択して、毎回 を使用してその中に埋め込んでから、次のよう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)
于 2008-09-09T00:53:24.320 に答える
7

両方を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
于 2008-09-09T00:42:31.287 に答える
3

Pythonには、「時間」オブジェクトの演算に使用できるpytz(http://pytz.sourceforge.net )モジュールがあります。DSTオフセットも処理します。上記のページには、pytzの使用法を説明するいくつかの例があります。

于 2008-09-20T16:13:22.197 に答える
1

datetime.time のオーバーフローを処理する良い方法がないため、これはサポートされていないようです。これが直接の答えではないことはわかっていますが、私よりもPythonの経験が豊富な人なら、これをもう少し進めることができます。詳細については、http: //bugs.python.org/issue3250を参照してください。

于 2008-09-09T00:37:28.507 に答える
-1

ミリ秒単位で時間を取得してから、減算を実行します。

于 2008-09-20T16:16:44.450 に答える
-1

まず、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])

それは少し不自由ですが、うまくいきます。

于 2008-09-09T00:47:48.343 に答える
-3

何か手っ取り早いものが必要な場合は、 Environment.TickCount がうまく機能するようです。

int start = Environment.TickCount

...何かをする()

int 経過時間 = Environment.TickCount - 開始

ジョン

于 2008-11-04T21:05:21.760 に答える