Как я могу получить текущее время в миллисекундах в Python?
time.time()
может обеспечить худшую точность, чем datetime.utcnow()
на некоторых платформах и версиях Python.
Как я могу получить текущее время в миллисекундах в Python?
time.time()
может обеспечить худшую точность, чем datetime.utcnow()
на некоторых платформах и версиях Python.
Ответы:
Вот что я сделал, основываясь на комментарии @samplebias выше:
import time
millis = int(round(time.time() * 1000))
print millis
Quick'n'easy. Спасибо всем, простите за пердеть мозг.
Для повторного использования:
import time
current_milli_time = lambda: int(round(time.time() * 1000))
Затем:
>>> current_milli_time()
1378761833768
round
? Кажется int(time.time() * 1000)
, достаточно?
.utcnow()
используется GetSystemTimeAsFileTime()
в недавнем CPython для Windows . Не 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
чтобы получить время в миллисекундах как целое число.
Если вам нужен простой метод в вашем коде, который возвращает миллисекунды с датой и временем:
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)
Он предоставляет контрольное время в секундах, которое можно использовать для последующего сравнения для измерения прошедшего времени.
Если вы используете мой код (ниже), время будет отображаться в секундах, а затем, после десятичной точки, в миллисекундах. Я думаю, что есть разница между 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 для миллисекунд могут быть приличными для решения или принятия некоторого предварительного условия приемлемым. Это может быть использовано для заполнения пробела в вашей базе данных, которая на самом деле никогда не использует его. Хотя, для реальных ситуаций, которые требуют точного времени, это в конечном итоге потерпит неудачу. Я бы не предложил никому использовать этот метод для критически важных операций, которые требуют действий или обработки в определенные моменты времени.
Например: пинг в оба конца в США составляет 30-80 мс ... Вы не могли бы просто округлить это и использовать его эффективно.
Мой собственный пример требует выполнения задач каждую секунду, что означает, что если я соберусь после того, как первые задачи ответят, я все равно буду брать на себя время обработки, умноженное на каждый цикл основного цикла. В итоге это был полный вызов функции каждые 60 секунд. это ~ 1440 в день .. не слишком точно.
Просто мысль для людей, ищущих более точные рассуждения, помимо решения проблемы с базой данных, которая никогда не использует их
import time; ms = time.time()*1000.0