파이썬에서 현재 시간을 밀리 초 단위로 얻으시겠습니까?


531

파이썬에서 현재 시간을 밀리 초 단위로 얻을 수 있습니까?


67
import time; ms = time.time()*1000.0
samplebias

4
@samplebias : 일부 플랫폼 및 Python 버전 time.time()보다 정확도가 떨어질 수 datetime.utcnow()있습니다.
jfs

5
언제 부터 밀리 초 단위로 ? 신기원 이후 (1970 년 1 월 1 일 자정) 이후라면 다음을 참조하십시오 : stackoverflow.com/questions/18169099/…
Michael Scheper

2
진정한 마이크로 초 해상도 밀리 초 타임 스탬프는 여기를 참조하십시오 : stackoverflow.com/questions/38319606/…
Gabriel Staples

답변:


710

내가 필요로 한 것은 위의 @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

34
이것은 정답을 제공하지 않을 수 있습니다. 문서에 따르면, "시간이 항상 부동 소수점 숫자로 반환 되더라도 모든 시스템에 1 초보다 정확한 정밀도를 제공하는 것은 아닙니다"
Jason Polites

11
궁금합니다. 왜해야 round합니까? 그것은 보인다 int(time.time() * 1000)충분하다?
Maxim Vladimirsky

14
IMO 나는 바닥을 사용하고 둥글 지 않고 사용하지만 그것은 나뿐입니다. 만약 누군가가 시간이 무엇인지 묻고 그것이 7:32라면, 그들이 원하는 숫자는 8이 아닌 7, 7입니다.
davr

1
@ParallelUniverse : .utcnow()사용 GetSystemTimeAsFileTime()Windows에서 최근의 CPython에 . time.clock()전화 하지 않을 QueryPerformanceCounter()것보다 더 많은 노이즈가 발생 하지 않습니까? 정밀도가 정확도와 같지 않음을 참조하십시오 .
jfs

10
@MaximVladimirsky 그것은 int ()의 동작이 아닙니다. Int는 값을 계산하지 않고 0으로 반올림합니다. 양수는 같지만 음수는 반대입니다. int (1.5)는 1을, int (-1.5)는 -1을, math.floor (-1.5)는 -2를 제공합니다. 참조 : docs.python.org/2/library/stdtypes.html
Skip Huffman

91

time.time()밀리 초에 대한 선호되는 접근 방식은 초입니다 datetime.

from datetime import datetime
dt = datetime.now()
dt.microsecond

94
그다지 유용하지는 않습니다-이것은 단지 dt의 초 안에 마이크로 초만을 제공합니다 . 참조 stackoverflow.com/a/1905423/74632
보리스 Chervenkov

8
시스템에서 안정적인 타임 스탬프를 얻는 공식적인 방법이기 때문에 +1입니다.
Pascal

16
-1. 이것은이 질문에 대한 오답입니다. @Boris가 언급했듯이, 이것은 "마이크로 초 단위의 시간"을 제공하지 않습니다. 예를 들어 마이크로 초 단위의 일, 시간, 초를 포함하지 않습니다.
ja

3
+1 이것은 올바른 값을 제공하며 수학 때문에 산술이 작동한다고 가정 할 수 있습니다. 사용자에게 밀리 초 / 마이크로 초 단위의 현재 시간이 필요한 경우 간단한 산술을 통해 시간을 얻을 수 있습니다. 요청하지 않은 시간 델타가 필요한 경우 다시 산술로 시간을 절약 할 수 있습니다.
잭 스타우트

3
전체 타임 스탬프가 아닌 현재 시간의 마이크로 초를 제공합니다.
kawadhiya21

48
def TimestampMillisec64():
    return int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() * 1000) 

3
.total_seconds()더 나은 정밀도를 생성하기 위해 공식을 인라인 할 수 있습니다 : (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3(실제 나누기가 활성화 된 경우 ) 또는 밀리 초를 자르려면을 사용하십시오 // 10**3.
jfs

1
날짜를 사용하는 경우 이것은 최선의 답을 것 같다
dlsso

35

버전 3.7 부터는 time.time_ns()신기원에서 나노초가지나면서 시간을 얻는 데 사용할 수 있습니다 . 그래서 당신은 할 수 있습니다

ms = time.time_ns() // 1000000 

정수로 밀리 초 단위로 시간을 얻습니다.


이것은 나를 위해 가장 잘 작동했습니다 (Python 3.7.6)
Paul Watson

22

샘플 코드 만 :

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

출력 : 1534343781311


13

또 다른 해결책은 자신의 utils.py에 포함시킬 수있는 기능입니다.

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

12

날짜 시간과 함께 밀리 초를 반환하는 간단한 방법을 코드에 원한다면 :

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= 날짜 (1970,1,1)
PR

현지 시간은 모호하고 단조로울 수 있습니다 (DST 전환 또는 현지 utc 오프셋을 변경해야하는 다른 이유로 인해). 사용 .utcnow()하는 대신하거나 절대 시간이 필요하지 않은 경우 당신은 사용할 수 있습니다 time.monotonous(). 참고 : 진정한 나눗셈이 활성화 된 some_int + dt.microseconds/ 1000.0수식 ( ) / 10**3과 부동 소수점 산술로 인해 미묘한 차이가 있습니다. 관련 답변 의 명시 적 공식 및 링크를total_seconds()
jfs

7

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

# timeutil.py
import datetime


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

# sample.py
import timeutil


timeutil.get_epochtime_ms()

7

경과 시간 측정이 걱정된다면 단조로운 시계 (python 3)를 사용해야합니다 . 예를 들어 NTP 쿼리가 시스템 시간을 조정 한 경우와 같이이 시계는 시스템 시계 업데이트의 영향을받지 않습니다.

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

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


4

내 코드 (아래)를 사용하면 시간이 초 단위로 표시되고 10 밀리 초 후에 나타납니다. Windows와 Unix에는 차이가 있다고 생각합니다. 있다면 의견을 말하십시오.

from time import time

x = time()
print(x)

내 결과 (Windows)는 다음과 같습니다.

1576095264.2682993

편집 : 차이가 없습니다 :) 감사합니다 tc0nn


1
Mac OSX에서는 차이가 없습니다 :/usr/local/opt/python/bin/python3.7 scratch.py 1577212639.882543
tc0nn

1
우분투 18에 diff 없음 :python3 scratch.py 1577212763.9136133
tc0nn

1

밀리 초 동안 1000에 대한 이러한 곱셈은 일부 전제 조건을 해결하거나 수용하기에 적당 할 수 있습니다. 실제로 사용하지 않는 데이터베이스의 간격을 채우는 데 사용할 수 있습니다. 그러나 정확한 타이밍이 필요한 실제 상황에서는 결국 실패합니다. 나는 누군가가 특정 시간에 조치를 취하거나 처리 해야하는 미션 크리티컬 작업 에이 방법을 사용하도록 제안하지는 않습니다.

예를 들면 : 미국에서 왕복 핑은 30-80ms입니다 ... 그냥 반올림하여 효율적으로 사용할 수는 없습니다.

내 예제에는 매초마다 작업이 필요합니다. 즉, 첫 번째 작업이 응답 한 후 반올림하면 처리 시간에 모든 메인 루프 사이클이 곱해집니다. 결국 60 초마다 총 함수 호출이 발생했습니다. 그것은 ~ 1440 하루입니다. 너무 정확하지 않습니다.

실제로 사용하지 않는 데이터베이스 격차를 해결하는 것보다 더 정확한 추론을 찾는 사람들을위한 생각입니다.


2
더 나은 솔루션이 있습니까? 또한 솔직히, 나는 당신이 말하는 것을 전혀 얻지 못했습니다. "반올림"은 무슨 뜻입니까?
Imperishable Night

2
더 나은 이해를위한 실용적인 예를 통해 솔루션을 설명하십시오
Ratan Uday Kumar

0

datetimePython 3 용 모듈을 사용하는 또 다른 솔루션 입니다.

datetime.datetime.timestamp(datetime.datetime.now())
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.