마이크로 초를 얻기 위해 파이썬에서 strftime ()과 함께 % f 사용하기


112

나는 strftime ()을 마이크로 초 정밀도로 사용하려고하는데, 이것은 % f ( 여기에 언급 된대로 )를 사용하여 가능해 보인다 . 그러나 다음 코드를 시도 할 때 :

import time
import strftime from time

print strftime("%H:%M:%S.%f")

... 시간, 분 및 초를 얻지 만 % f는 마이크로 초 기호없이 % f로 인쇄합니다. Ubuntu에서 Python 2.6.5를 실행하고 있으므로 괜찮을 것이고 % f가 지원되어야합니다 (내가 아는 한 2.6 이상에서 지원됨).

답변:


181

이를 얻기 위해 datetime의 strftime 함수를 사용할 수 있습니다. 문제는 시간의 strftime이 마이크로 초 정보를 전달하지 않는 타임 튜플을 받아 들인다는 것입니다.

from datetime import datetime
datetime.now().strftime("%H:%M:%S.%f")

트릭을해야합니다!


1
사용하고 싶지 %z
않다면

@Vallentin은 그 반대라고 확신합니다! 시간이에 나타나지 않는 동안 지시문datetime 지원합니다%z .
adamnfish

둘 다 %zPython 3에서 지원합니다 . :-) 여기에 datetime시간이 있습니다
adamnfish

오, 맞아요. 나는 그것이 시간에 대한 테이블처럼 하단에 없었기 때문에 datetime에 그것을 놓쳤다. : P
vallentin

6
주의 from datetime import datetime. 만약 당신이 사용해야 만 할 import datetime것입니다datetime.datetime.now().strftime("%H:%M:%S.%f")
JBaczuk

34

잘못된 문서를보고 있습니다. time모듈은 다른 문서가 있습니다 .

다음 과 같이 datetime모듈을 사용할 수 있습니다 strftime.

>>> from datetime import datetime
>>>
>>> now = datetime.now()
>>> now.strftime("%H:%M:%S.%f")
'12:19:40.948000'

1
여기에 날짜 모듈의 문서에 대한 링크입니다 : docs.python.org/2/library/...은
씨 Fooz

게시물 주셔서 감사합니다. 날짜 및 시간 모듈이있는 이유는 무엇입니까?
tommy.carstensen 2015 년


9

Python의 time모듈을 사용하면 %f.

여전히 time모듈 만 사용 하려는 사용자를 위한 해결 방법은 다음과 같습니다.

now = time.time()
mlsec = repr(now).split('.')[1][:3]
print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now))

2017-01-16 16 : 42 : 34.625 EET 와 같은 결과를 얻을 수 있습니다 (예, 밀리 초를 사용합니다).

코드를 세부 사항으로 나누려면 아래 코드를 Python 콘솔에 붙여 넣으세요.

import time

# Get current timestamp
now = time.time()

# Debug now
now
print now
type(now)

# Debug strf time
struct_now = time.localtime(now)
print struct_now
type(struct_now)

# Print nicely formatted date
print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)

# Get miliseconds
mlsec = repr(now).split('.')[1][:3]
print mlsec

# Get your required timestamp string
timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
print timestamp

설명을 위해 Python 2.7.12 결과도 여기에 붙여 넣습니다.

>>> import time
>>> # get current timestamp
... now = time.time()
>>> # debug now
... now
1484578293.519106
>>> print now
1484578293.52
>>> type(now)
<type 'float'>
>>> # debug strf time
... struct_now = time.localtime(now)
>>> print struct_now
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=16, tm_hour=16, tm_min=51, tm_sec=33, tm_wday=0, tm_yday=16, tm_isdst=0)
>>> type(struct_now)
<type 'time.struct_time'>
>>> # print nicely formatted date
... print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
2017-01-16 16:51:33 EET
>>> # get miliseconds
... mlsec = repr(now).split('.')[1][:3]
>>> print mlsec
519
>>> # get your required timestamp string
... timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
>>> print timestamp
2017-01-16 16:51:33.519 EET
>>>

6

이것은 일을해야한다

import datetime
datetime.datetime.now().strftime("%H:%M:%S.%f")

인쇄됩니다

HH:MM:SS.microseconds 예를 들면 14:38:19.425961


5

기능을 time사용 하여 모듈 에서 마이크로 초 정밀도를 얻을 수도 time()있습니다.
( time.time()epoch 이후의 시간을 초 단위로 반환합니다. 소수 부분은 원하는 시간 인 마이크로 초 단위입니다.)

>>> from time import time
>>> time()
... 1310554308.287459   # the fractional part is what you want.


# comparision with strftime -
>>> from datetime import datetime
>>> from time import time
>>> datetime.now().strftime("%f"), time()
... ('287389', 1310554310.287459)

1
우수한. 도와 주셔서 감사합니다. 특정 cset에서 sudo로 스크립트를 실행할 때 마이크로 초가 나타나지 않지만 특정 cset에서 실행하기 전에 sudo로 로그인하면 수행하는 이상한 버그를 발견했지만 작업을 수행했습니다. 이상한.
user820924

4

마이크로 초에 대한 "% f"가 작동하지 않는 경우 다음 방법을 사용하십시오.

import datetime

def getTimeStamp():
    dt = datetime.datetime.now()
    return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)

3
dt.microsecond가 6 자리 미만이면 작동하지 않습니다.
M456 2014-06-24

3
이것은 실제로 나를 위해 일한 유일한 솔루션이었습니다. Windows의 Jython에서 % f는 항상 리터럴 % f를 인쇄하는 것 같습니다. : 나는 밀리 초 사용 STR (dt.microsecond) [3 0]를 원
에드 랜달

1
str (dt.microsecond) [0 : 3]은 잘못된 결과를 생성 할 수 있습니다 (예 : 300 마이크로 초는 0.300 밀리 초이지만 300을 인쇄합니다!)
cabbi

3
"% 03D"%의 INT (dt.microsecond / 1000) ->이 인쇄한다 millseconds 아니라 마이크로
cabbi

0

속도를 원하면 다음을 시도하십시오.

def _timestamp(prec=0):
    t = time.time()
    s = time.strftime("%H:%M:%S", time.localtime(t))
    if prec > 0:
        s += ("%.9f" % (t % 1,))[1:2+prec]
    return s

prec정밀도는 어디에 있습니까 -원하는 소수 자릿수. 이 함수에는 여기에 제시된 다른 솔루션과 같이 분수 부분에 선행 0이있는 문제가 없습니다.


-1

정수를 원하면 다음 코드를 시도하십시오.

import datetime
print(datetime.datetime.now().strftime("%s%f")[:13])

산출:

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