私には2つのdatetime.time
値がexit
ありenter
、次のようなことをしたい:
duration = exit - enter
ただし、次のエラーが表示されます。
TypeError: サポートされていないオペランド型 -: 'datetime.time' および 'datetime.time'
これを正しく行うにはどうすればよいですか?time
考えられる解決策の 1 つは、変数を変数に変換してからdatetime
減算することです。
これを試して:
from datetime import datetime, date
datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)
combine
減算可能な日時を構築します。
使用する:
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 に発生した場合、予期しない結果が返される可能性があるため、これは当てはまらない可能性があります。
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)
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())
datetime.time
それはできません - しかし、あなたは使うことができますdatetime.datetime.now()
start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start
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())
datetime.time
この方法で時間を減算することはほとんど意味がないため、これはサポートされていません。datetime.datetime
これを行う場合は、フルを使用してください。
私はあなたと同様の状況にあり、最終的にはarrowという外部ライブラリを使用しました。
これは次のようになります。
>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)