Як я можу отримати поточний час у мілісекундах в Python?
time.time()
може забезпечити гіршу точність, ніж datetime.utcnow()
на деяких платформах та версіях python.
Як я можу отримати поточний час у мілісекундах в Python?
time.time()
може забезпечити гіршу точність, ніж datetime.utcnow()
на деяких платформах та версіях python.
Відповіді:
Що мені було потрібно, ось що я зробив, грунтуючись на коментарі @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()
останній 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()
на відповідну відповідь
Якщо ви стурбовані вимірюванням минулого часу, вам слід скористатися монотонним годинником (пітон 3) . На цей годинник не впливають оновлення системних годин, як ви побачили, чи запит NTP коригував, наприклад, ваш системний час.
>>> import time
>>> millis = round(time.monotonic() * 1000)
Він забезпечує опорний час у секундах, який можна використати для порівняння пізніше для вимірювання минулого часу.
Якщо ви використовуєте мій код (нижче), час з’явиться в секундах, після десяткових мілісекунд. Я думаю, що між Windows та Unix є різниця - будь ласка, прокоментуйте, якщо є.
from time import time
x = time()
print(x)
мій результат (у Windows):
1576095264.2682993
EDIT : Різниці немає :) Дякую 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