91

以下の 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 timeend time、5行目でキャストして期間を切り上げますが、さらに説明は何ですか?

デルタが何を意味するか (平均または差) は知っていますが、なぜ渡さなけれseconds = uptimeばならないのでしょうか。timedeltaHH:MM:SS

4

2 に答える 2

116

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)

__repr__また、str キャストの場合は、読みやすさを向上させるのではなく、適切にフォーマットされた値を返します。ドキュメントから:

str(t) [D day[s], ][H]H:MM:SS[.UUUUUU] の形式で文字列を返します。ここで、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

于 2011-07-19T15:09:06.223 に答える
13

seconds = uptime を timedelta に渡す必要があるのはなぜですか

timedelta オブジェクトは秒、ミリ秒、日などを渡すことができるため、何を渡すかを指定する必要があります (これが明示的なキーを使用する理由です)。intfloat も受け入れることができるため、型キャストは不要です。

また、文字列のキャストがうまく機能して HH:MM:SS が得られるのはなぜですか?

フォーマットするのは型キャストではなく、__str__オブジェクトの内部メソッドです。実際、次のように記述しても同じ結果が得られます。

print(datetime.timedelta(seconds=int(uptime)))
于 2011-07-19T15:07:18.797 に答える