以下のpythonコードを考えると、そこで何が起こっているのかを理解してください。
start_time = time.time()
time.sleep(42)
end_time = time.time()
uptime = end_time - start_time
human_uptime = str(datetime.timedelta(seconds=int(uptime)))
だから、start time
とend time
の違いがわかります。5行目で、キャストによって期間を切り上げます。
デルタの意味(平均または差)は知っていますが、なぜseconds = uptime
をtimedelta
に渡す必要があり、なぜ文字列キャストがうまく機能してHH:MM:SS
を取得するのですか?
Timedeltaは次のように定義されているため:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
すべての引数はオプションであり、デフォルトは0です。
そのようにオプションの引数を使用すると、「3日4ミリ秒」と簡単に言うことができます。
>>> datetime.timedelta(days=3, milliseconds=4)
datetime.timedelta(3, 0, 4000)
>>> datetime.timedelta(3, 0, 0, 4) #no need for that.
datetime.timedelta(3, 0, 4000)
Strキャストの場合、読みやすさを向上させるために、__repr__
の代わりにNice形式の値を返します。ドキュメントから:
str(t)文字列を[D day [s]、] [H] H:MM:SS [.UUUUUUU]の形式で返します。ここで、Dは負のtに対して負です。 (5)
>>> datetime.timedelta(seconds = 42).__repr__()
'datetime.timedelta(0, 42)'
>>> datetime.timedelta(seconds = 42).__str__()
'0:00:42'
チェックアウトのドキュメント:
http://docs.python.org/library/datetime.html#timedelta-objects
なぜ秒=稼働時間をtimedeltaに渡す必要があるのですか
Timedeltaオブジェクトには秒、ミリ秒、日などを渡すことができるため、何を渡すかを指定する必要があります(これが明示的なキーを使用する理由です)。 int
への型キャストは、フロートも受け入れることができるため不要です。
そして、なぜ文字列キャストが非常にうまく機能するので、HH:MM:SSを取得しますか?
フォーマットするのは型キャストではなく、オブジェクトの内部__str__
メソッドです。実際、次のように書くと同じ結果が得られます。
print datetime.timedelta(seconds=int(uptime))