Pythonで現在の時間をミリ秒単位で取得するにはどうすればよいですか?
time.time()
よりも精度が低くなる可能性がありdatetime.utcnow()
ます。
Pythonで現在の時間をミリ秒単位で取得するにはどうすればよいですか?
time.time()
よりも精度が低くなる可能性がありdatetime.utcnow()
ます。
回答:
私が必要なものについて、上記の@samplebiasのコメントに基づいて、私がやったことは次のとおりです:
import time
millis = int(round(time.time() * 1000))
print millis
クイックイージー。おかげで、おならをお詫び申し上げます。
再利用の場合:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
次に:
>>> current_milli_time()
1378761833768
round
でしょうか。そうですint(time.time() * 1000)
十分ですか?
.utcnow()
使用GetSystemTimeAsFileTime()
します。ないでしょうtime.clock()
(呼び出しQueryPerformanceCounter()
よりノイズそれは減らすかもしれないより紹介)?精度は精度と同じではないを参照してください。
time.time()
秒にのみ解像度を与える可能性がありdatetime
ます。ミリ秒の推奨アプローチはです。
from datetime import datetime
dt = datetime.now()
dt.microsecond
def TimestampMillisec64():
return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000)
.total_seconds()
生成するために(おそらく)より良い精度を:(td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3
(真の部門で有効)それとも、ミリ秒を切り捨てるしたい場合は、次に使用// 10**3
。
バージョン3.7を使用できtime.time_ns()
エポックから渡されたナノ秒と時間を取得します。だからできる
ms = time.time_ns() // 1000000
ミリ秒単位の時間を整数として取得します。
datetimeでミリ秒を返す単純なメソッドがコードに必要な場合:
from datetime import datetime
from datetime import timedelta
start_time = datetime.now()
# returns the elapsed milliseconds since the start of the program
def millis():
dt = datetime.now() - start_time
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
return ms
start_time
= datetime(1970,1,1)
.utcnow()
代わりに使用するか、絶対時間を必要としない場合は、を使用できますtime.monotonous()
。注:真の除算を有効にしsome_int + dt.microseconds/ 1000.0
た式( ) / 10**3
との間には、浮動小数点演算による微妙な違いがあります。関連する回答の明示的な公式とリンクをtotal_seconds()
経過時間の測定が心配な場合は、単調時計(python 3)を使用する必要があります。たとえば、NTPクエリがシステム時間を調整した場合に見られるように、このクロックはシステムクロックの更新の影響を受けません。
>>> import time
>>> millis = round(time.monotonic() * 1000)
経過時間を測定するために後で比較するために使用できる秒単位の基準時間を提供します。
以下のコードを使用すると、時間は秒単位で表示され、10進数の後にミリ秒単位で表示されます。WindowsとUnixには違いがあると思います-ある場合はコメントしてください。
from time import time
x = time()
print(x)
私の結果(Windows上)は:
1576095264.2682993
編集:違いはありません:)ありがとうtc0nn
/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
python3 scratch.py 1577212763.9136133
ミリ秒で1000になるこれらの乗算は、いくつかの前提条件を受け入れたり、解決したりするのに適切です。これは、実際には使用しないデータベースのギャップを埋めるために使用できます。ただし、正確なタイミングを必要とする実際の状況では、最終的に失敗します。アクションを必要とするミッションクリティカルな操作や特定のタイミングでの処理にこのメソッドを使用することはお勧めしません。
たとえば、米国では往復pingが30〜80ミリ秒です...単純にそれを切り上げて効率的に使用することはできません。
私の例では毎秒タスクが必要です。つまり、最初のタスクが応答した後に切り上げた場合でも、メインループサイクルごとに乗算された処理時間がかかります。これは、60秒ごとの合計関数呼び出しになります。1日1440です。あまり正確ではありません。
本当にそれを使用することのないデータベースのギャップを解決する以上に、より正確な推論を求めている人々のための考えです。
import time; ms = time.time()*1000.0