148

私には2つのdatetime.time値がexitありenter、次のようなことをしたい:

duration = exit - enter

ただし、次のエラーが表示されます。

TypeError: サポートされていないオペランド型 -: 'datetime.time' および 'datetime.time'

これを正しく行うにはどうすればよいですか?time考えられる解決策の 1 つは、変数を変数に変換してからdatetime減算することです。

4

10 に答える 10

110

これを試して:

from datetime import datetime, date

datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)

combine減算可能な日時を構築します。

于 2011-03-10T12:58:56.037 に答える
57

使用する:

from datetime import datetime, date

duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)

Usingdate.minはもう少し簡潔で、深夜でも機能します。

date.today()最初の呼び出しが 23:59:59 に発生し、次の呼び出しが 00:00:00 に発生した場合、予期しない結果が返される可能性があるため、これは当てはまらない可能性があります。

于 2016-09-23T01:07:30.590 に答える
43

time を使用する代わりに、timedelta を試してください:

from datetime import timedelta

t1 = timedelta(hours=7, minutes=36)
t2 = timedelta(hours=11, minutes=32)
t3 = timedelta(hours=13, minutes=7)
t4 = timedelta(hours=21, minutes=0)

arrival = t2 - t1
lunch = (t3 - t2 - timedelta(hours=1))
departure = t4 - t3

print(arrival, lunch, departure)
于 2016-07-07T12:26:01.040 に答える
9

python timedeltaライブラリは、必要なことを行う必要があります。2 つのインスタンスを減算すると、 Atimedeltaが返されます。datetime

import datetime
dt_started = datetime.datetime.utcnow()

# do some stuff

dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())
于 2016-11-08T17:04:52.007 に答える
6

datetime.timeそれはできません - しかし、あなたは使うことができますdatetime.datetime.now()

start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start
于 2019-04-28T19:18:40.187 に答える
4
import datetime

def diff_times_in_seconds(t1, t2):
    # caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1
    h1, m1, s1 = t1.hour, t1.minute, t1.second
    h2, m2, s2 = t2.hour, t2.minute, t2.second
    t1_secs = s1 + 60 * (m1 + 60*h1)
    t2_secs = s2 + 60 * (m2 + 60*h2)
    return( t2_secs - t1_secs)

# using it
diff_times_in_seconds( datetime.datetime.strptime( "13:23:34", '%H:%M:%S').time(),datetime.datetime.strptime( "14:02:39", '%H:%M:%S').time())
于 2015-04-10T11:37:16.033 に答える
4

datetime.timeこの方法で時間を減算することはほとんど意味がないため、これはサポートされていません。datetime.datetimeこれを行う場合は、フルを使用してください。

于 2011-03-10T12:57:37.080 に答える
2

私はあなたと同様の状況にあり、最終的にはarrowという外部ライブラリを使用しました。

これは次のようになります。

>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)
于 2016-09-19T16:35:01.270 に答える