Сравнение времени с точностью до секунды

Как я могу получить количество миллисекунд с эпохи?

Обратите внимание, что мне нужны фактические миллисекунды, а не секунды, умноженные на 1000. Я сравниваю время для материала, которое занимает менее секунды и требует миллисекундной точности. (Я просмотрел множество ответов, и все они кажутся * 1000)

Я сравниваю время, которое я получаю в запросе POST до конца времени на сервере. Мне просто нужно, чтобы два раза были в одном формате, что бы это ни было. Я решил, что время unix будет работать, поскольку Javascript имеет функцию для получения этого

Ответ 1

time.time() * 1000 даст вам миллисекундную точность, если это возможно.

Ответ 2

Я вижу много людей, предлагающих time.time(). В то время как time.time() является точным способом измерения фактического времени суток, не гарантируется точность миллисекунды! Из документации:

Обратите внимание, что хотя время всегда возвращается как число с плавающей запятой, не все системы обеспечивают время с лучшей точностью, чем 1 секунда. Хотя эта функция обычно возвращает неубывающие значения, она может вернуть более низкое значение, чем предыдущий вызов, если системные часы были установлены между двумя вызовами.

Это не та процедура, которую вы хотите, сравнивая два раза! Он может взорваться множеством интересных способов, если вы не можете сказать, что произошло. Фактически, когда вы сравниваете два раза, вам действительно не нужно знать, какое время суток это, только то, что два значения имеют одну и ту же отправную точку. Для этого библиотека time предоставляет вам следующую процедуру: time.clock(). В документации указано:

В Unix верните текущее время процессора как число с плавающей запятой, выраженное в секундах. Точность и на самом деле само определение значения "процессорного времени" зависит от определения функции C с тем же именем, но в любом случае это функция, используемая для бенчмаркинга алгоритмов Python или хронометража.

В Windows эта функция возвращает часы настенных часов, прошедшие с момента первого вызова этой функции, в виде числа с плавающей запятой, на основе функции Win32 QueryPerformanceCounter(). Разрешение обычно лучше, чем одна микросекунда.

Используйте time.clock().


Или, если вы просто хотите проверить, насколько быстро работает ваш код, вы можете сделать его удобным для себя и использовать timeit.timeit(), который выполняет все измерения для вы и являетесь фактическим стандартным способом измерения прошедшего времени при выполнении кода.

Ответ 3

Использование 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)

Ответ 4

int(time.time() * 1000) сделает то, что вы хотите. time.time() обычно возвращает значение float с секундами с точностью до секунды, так что умножение на него не наносит вреда точности.

Другое слово для вводящего в заблуждение ответа @kqr: time.clock() не дает вам времени эпохи. Это дает вам время, в течение которого процесс запускался на CPU для Unix, или время, прошедшее с момента первого вызова функции в Windows, см. python docs.

Также верно, что состояние docs означает, что time.time() не гарантирует точность ms. Хотя это утверждение в основном связано с тем, что вы не должны полагаться на эту точность на встроенное или архитектурное оборудование, и я не знаю ни одного примера, где вы на самом деле не получили бы точности мс.

Ответ 5

import datetime
time = datetime.datetime.now()
ms = time.microsecond

Возвращает 6-значное число, микросекунду. Последние 3 цифры бесполезны на ПК, поскольку он работает с тиками, который медленнее, чем микросекунда. Первые 3 цифры должны быть достаточными для ваших нужд.