timedeltaを合計秒数に変換します


186

時差があります

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

では、経過した秒数の合計をどのようにして見つけますか?diff.seconds日は数えません。私はそれをできた:

diff.seconds + diff.days * 24 * 3600

このための組み込みメソッドはありますか?


8
@RestRisiko-あなたは正しい。それでも、Stack Overflowに質問があると便利です。次回、私または他の誰かがGoogleに質問したとき、彼はトップの結果として良い答えを持っています。
ripper234

「良い」の別の定義については後で説明します。逃げる前に私の答えを読んでください:)
John Machin

コンピューティングtime1diffコードには複数の問題があります。現在のUTC時間を単純な日付時刻オブジェクトとして取得するには、datetime.utcnow()代わりに使用します。現地時間の代わりにUTCを使用して違いを見つける必要がある理由を理解するには、「日時-Pythonの間に24時間経過したかどうかを確認する」参照してください。time.monotonic()time.time()またはの代わりにdatetime.utcnow())イベント間の経過時間を見つける方が望ましい場合があります。
jfs 2015年

回答:


384

を使用しtimedelta.total_seconds()ます。

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

26
Python 2.7の新機能
Evgeny

7
誰かが2.6との互換性を保つ必要がある場合:新しいメソッドを使用してdatetime.timedeltaを拡張する方法については、stackoverflow.com / questions / 3318348 /…を参照してください。
Uwe Geuder 2013

6
Python3.6のdatetime.timedelta.total_seconds(time2-time1)
Russo

8

datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))表現に問題があります 。

(1)必要なのが2つの瞬間の差(秒単位)だけである場合、非常に単純なtime.time()作業で済みます。

(2)これらのタイムスタンプを他の目的に使用している場合は、結果全体に大きな匂いがあるため、何をしているかを考慮する必要があります。

gmtime()時間タプルを返すUTCが、mktime()時間のタプルを期待現地時間。

私はオーストラリアのメルボルンにいます。標準のTZはUTC + 10ですが、夏時間は明日の朝までまだ有効なので、UTC + 11になります。次を実行すると、2011-04-02T20:31現地時間でした... UTCは2011-04-02T09:31でした

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

式の結果であるt3がUTC + 1であることがわかります。これはUTC +(ローカルのDSTの差)のように見えますが、あまり意味がありません。datetime.datetime.utcnow()DSTがオン/オフになったときに1時間ジャンプしないものを使用することを検討する必要があります。time.time()


説明をありがとう。私が今使っている目的のために、時々の違いでも時々の違いは重要ではありませんが、私がもっと意味のあるものを書くとき、私はこれを将来チェックすることを確実にするでしょう。
ripper234

-7

mx.DateTimeモジュールを使用できます

import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.