web-dev-qa-db-ja.com

秒未満の精度で時間を比較する

エポック以降のミリ秒数を取得するにはどうすればよいですか?

秒に1000を掛けたものではなく、実際のミリ秒が必要なことに注意してください。1秒未満でミリ秒の精度が必要なものの時間を比較しています。 (私はたくさんの答えを見てきましたが、それらはすべて* 1000を持っているようです)

POSTリクエストで取得する時間をサーバーの終了時間と比較しています。2回は同じ形式である必要があります。それが何であれ。 Javascriptにはそれを取得する機能があるため、動作します

35
user984003

time.time() * 1000will可能であれば、ミリ秒の精度を与えます。

29
duskwuff

int(time.time() * 1000)はあなたが望むことをします。 time.time()は通常、epocheからの秒数をカウントする倍精度の浮動小数点値を返すため、乗算しても精度に害はありません。

@kqrの誤解を招く答えに対する別の言葉:time.clock()は、エポックの時間を与えません。 UnixのCPUでプロセスが実行された時間、またはWindowsで関数を最初に呼び出してから経過した時間を示します。 python docs を参照してください。

また、time.time()がms精度を保証するものではないというドキュメントの状態も事実です。このステートメントは、主に組み込みハードウェアまたは前史ハードウェアでこの精度に依存しないことを確認するためのものであり、実際にms精度が得られない例は知りません。

18
Michael

datetime を使用:

>>> import datetime
>>> delta = datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)
>>> delta
datetime.timedelta(15928, 52912, 55000)
>>> delta.total_seconds()
1376232112.055
>>> delta.days, delta.seconds, delta.microseconds
(15928, 52912, 55000)
14
falsetru

time.time()を提案している人がたくさんいます。 time.time()は実際の時刻を正確に測定する方法ですが、ミリ秒の精度を保証するものではありません!ドキュメントから:

時間は常に浮動小数点数として返されますが、すべてのシステムが1秒よりも正確な時間を提供するわけではないことに注意してください。この関数は通常、減少しない値を返しますが、2つの呼び出しの間にシステムクロックが戻されている場合、前の呼び出しよりも低い値を返すことができます。

これは、not2回比較するときに必要な手順です!何が起こったのか分からないまま、非常に多くの興味深い方法で爆発する可能性があります。実際、2回比較する場合、実際の時刻を知る必要はありません。2つの値の開始点が同じであるということだけです。このために、timeライブラリーは別のプロシージャーtime.clock()を提供します。ドキュメントには次のように書かれています:

Unixでは、現在のプロセッサ時間を浮動小数点数で秒単位で返します。精度、および実際には「プロセッサー時間」の意味のまさに定義は、同じ名前のC関数の精度に依存しますが、いずれにしてもこれは使用する関数ですベンチマーク用Pythonまたはタイミングアルゴリズム。

Windowsでは、この関数は、Win32関数QueryPerformanceCounter()に基づいて、この関数を最初に呼び出してから経過した経過時間を浮動小数点数として返します。 通常、解像度は1マイクロ秒よりも優れています

time.clock()を使用します。


または、コードの実行速度をテストするだけの場合は、コードを自分で使いやすくして、 timeit.timeit() を使用できます。コード実行の経過時間を測定する標準的な方法。

14
kqr