itsource

Python에서 현재 시간을 밀리초 단위로 가져오려면 어떻게 해야 합니까?

mycopycode 2022. 9. 6. 22:32
반응형

Python에서 현재 시간을 밀리초 단위로 가져오려면 어떻게 해야 합니까?

Python에서 현재 시간을 밀리초 단위로 가져오려면 어떻게 해야 합니까?

사용방법:

import time

def current_milli_time():
    return round(time.time() * 1000)

그 후, 다음과 같이 입력합니다.

>>> current_milli_time()
1378761833768

Python 3.7+의 경우 에폭에서 나노초가 경과한 시간을 얻기 위해 사용합니다.

이것은 밀리초 단위의 시간을 정수로 제공합니다.

import time

ms = time.time_ns() // 1_000_000

time.time() 는, 2번째의 해결 방법만을 제공할 수 있습니다.밀리초 동안 권장되는 접근법은 입니다.

from datetime import datetime
dt = datetime.now()
dt.microsecond
def TimestampMillisec64():
    return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 

샘플 코드:

import time
timestamp = int(time.time()*1000.0)

출력: 1534343781311

3.7 이후의 Python 버전에서는 를 사용하는 것이 가장 좋습니다.문서에 기재된 바와 같이:

time.perf_counter() -> float

성능 카운터 값(단시간 측정 시 사용 가능한 최고 분해능 클럭)을 반환합니다.여기에는 수면 중 경과된 시간이 포함되며 시스템 전체에 걸쳐 있습니다.반환된 값의 기준점이 정의되지 않았기 때문에 연속된 콜 결과의 차이만 유효합니다.

time.perf_counter_ns() -> int

perf_counter()와 비슷하지만 시간은 나노초로 반환됩니다.

이는 시스템에서 제공하는 최고의 카운터를 사용합니다.또한 퍼포먼스 측정에 사용할 수 있도록 특별히 설계되었습니다(따라서 다른 타이머의 일반적인 함정을 회피하려고 합니다).

또한 나노초의 정수를 얻을 수 있으므로 1000000으로 나누면 밀리초를 얻을 수 있습니다.

start = time.perf_counter_ns()
# do some work
duration = time.perf_counter_ns() - start
print(f"Your duration was {duration // 1000000}ms.")

또 다른 솔루션은 자신의 활용도에 내장할 수 있는 기능입니다.화이

import time as time_ #make sure we don't override time
def millis():
    return int(round(time_.time() * 1000))

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

경과 시간 측정에 관심이 있는 경우 단조 시계(피톤 3)를 사용해야 합니다.이 클럭은 예를 들어 NTP 쿼리가 시스템 시간을 조정했는지 확인할 수 있는 시스템클럭 업데이트의 영향을 받지 않습니다.

>>> import time
>>> millis = round(time.monotonic() * 1000)

나중에 경과 시간을 측정하기 위해 비교할 수 있는 기준 시간(초)을 제공합니다.

내 코드(아래)를 사용하는 경우 시간은 초 단위로 표시되고 소수점 이후 밀리초 단위로 표시됩니다.Windows 와 Unix 의 차이는 있다고 생각합니다만, 있으면 코멘트해 주세요.

from time import time

x = time()
print(x)

(Windows에서의) 결과는 다음과 같습니다.

1576095264.2682993

편집: 차이는 없습니다.감사합니다 tc0nnn

현재 UTC 시간을 밀리초 단위로 얻는 가장 간단한 방법은 다음과 같습니다.

# timeutil.py
import datetime


def get_epochtime_ms():
    return round(datetime.datetime.utcnow().timestamp() * 1000)

# sample.py
import timeutil


timeutil.get_epochtime_ms()

Python 3.8+에서 몇 가지 테스트를 한 결과, 적어도 Windows 10에서는 이러한 옵션이 정확히 같은 결과를 제공한다는 것을 알게 되었습니다.

import time

# Option 1
unix_time_ms_1 = int(time.time_ns() / 1000000)
# Option 2
unix_time_ms_2 = int(time.time() * 1000)

마음에 드는 것을 자유롭게 사용하세요.그리고 이것보다 더 복잡한 해결책은 필요 없다고 생각합니다.

갱신: @neuralmer 덕분입니다.

가장 효율적인 방법 중 하나:

(time.time_ns() + 500000) // 1000000  #rounding last digit (1ms digit)

또는

time.time_ns() // 1000000          #flooring last digit (1ms digit)

둘 다 다른 방법 중에서 매우 효율적입니다.

벤치마크:

아래 내 컴퓨터에서 여러 가지 방법에 대한 벤치마크 결과를 볼 수 있습니다.

import time

t = time.perf_counter_ns()
for i in range(1000):
    o = time.time_ns() // 1000000           #each 200 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = (time.time_ns() + 500000) // 1000000  #each 227 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = round(time.time_ns() / 1000000)    #each 456 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = int(time.time_ns() / 1000000)      #each 467 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)


t = time.perf_counter_ns()
for i in range(1000):
    o = int(time.time()* 1000)          #each 319 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)

t = time.perf_counter_ns()
for i in range(1000):
    o = round(time.time()* 1000)       #each 342 ns
t2 = time.perf_counter_ns()
print((t2 - t)//1000)```

이러한 1000을 밀리초 동안 곱하면 몇 가지 전제 조건을 해결하거나 허용할 수 있는 수준으로 만들 수 있습니다.실제로 사용하지 않는 데이터베이스의 공백을 메우기 위해 사용할 수 있습니다.그러나 정확한 타이밍이 필요한 실제 상황에서는 결국 실패합니다.작업이나 특정 타이밍에 처리해야 하는 미션 크리티컬 작업에 이 방법을 사용하는 것은 권장하지 않습니다.

예를 들어 미국에서는 왕복 ping이 30~80ms입니다.당신은 그것을 단순히 모아서 효율적으로 사용할 수 없습니다.

제 예에서는 매초 작업이 필요합니다.즉, 첫 번째 작업이 응답한 후 반올림하면 메인 루프 사이클마다 처리 시간이 곱해집니다.이것은 60초마다의 합계 함수 호출이 됩니다.하루에 1440달러까지..너무 정확하지 않아요

실제로 사용하지 않는 데이터베이스 갭을 해결하는 것보다 더 정확한 추론을 찾는 사람들을 위한 아이디어입니다.

unix 이후 경과 시간

from time import time
while True:
    print(str(time()*1000)+'ms       \r', end='')

프로그램 시작 후 시간

from time import time
init = time()
while True:
    print(str((time()-init)*1000)+'ms         \r', end='')

시간 내주셔서 감사합니다

다른 솔루션으로는datetimePython 3+용 모듈.

round(datetime.datetime.timestamp(datetime.datetime.now()) * 1000)

언급URL : https://stackoverflow.com/questions/5998245/how-do-i-get-the-current-time-in-milliseconds-in-python

반응형