날짜/시간을 밀리초의 문자열로 포맷합니다.
개체를 밀리초의 문자열로 포맷하려면 어떻게 해야 합니까?
밀리초의 날짜 문자열을 가져오려면[:-3]
뒷자리 세 자리를 자르다%f
(마이크로초):
>>> from datetime import datetime
>>> datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
'2020-05-04 10:18:32.926'
Python 3.6+에서는, 를 설정할 수 있습니다.timespec
:
>>> from datetime import datetime
>>> datetime.utcnow().isoformat(sep=' ', timespec='milliseconds')
'2019-05-10 09:08:53.155'
@Cabbi는 일부 시스템(Windows 2.7)에서 마이크로초 포맷이%f
잘못 줄 수 있기 때문에 마지막 세 글자를 간단히 잘라내는 것은 휴대할 수 없습니다.이러한 시스템은 설명서에서 지정된 동작을 따르지 않습니다.
지시. | 의미. | 예 |
---|---|---|
%f | 마이크로초(마이크로초)는 10진수로, 6자리로 0 패딩됩니다. | 000000, 000001, …, 999999 |
다음 코드는 타임스탬프를 밀리초로 신중하게 포맷합니다.
>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.')
>>> "%s.%03d" % (dt, int(micro) / 1000)
'2016-02-26 04:37:53.133'
OP가 원하는 정확한 출력을 얻으려면 구두점 문자를 삭제해야 합니다.
>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y%m%d%H%M%S.%f').split('.')
>>> "%s%03d" % (dt, int(micro) / 1000)
'20160226043839901'
사용방법:
>>> from datetime import datetime
>>> datetime.utcnow().strftime('%Y%m%d%H%M%S%f')
'20220402055654344968'
사용하다[:-3]
마지막 세 글자를 삭제하다%f
마이크로초 단위:
>>> from datetime import datetime
>>> datetime.now().strftime('%Y/%m/%d %H:%M:%S.%f')[:-3]
'2013/12/04 16:50:03.141'
import datetime
# convert string into date time format.
str_date = '2016-10-06 15:14:54.322989'
d_date = datetime.datetime.strptime(str_date , '%Y-%m-%d %H:%M:%S.%f')
print(d_date)
print(type(d_date)) # check d_date type.
# convert date time to regular format.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
<<< 출력 >>>>
2016-10-06 15:14:54.322989
<class 'datetime.datetime'>
06 October 2016 03:14:54 PM
2016-10-06 03:14:54 PM
2016-10-06 15:14:54
datetime.datetime.strftime()보다 빠르고 기본적으로 UTC 타임스탬프에서 비알파 문자를 삭제하는 것을 의미한다고 생각합니다.
접근 속도가 약간 더 빠릅니다.또한 스트링 슬라이스를 통해 작업 속도를 높일 수 있을 것 같습니다.
>>> import timeit
>>> t=timeit.Timer('datetime.utcnow().strftime("%Y%m%d%H%M%S%f")','''
... from datetime import datetime''')
>>> t.timeit(number=10000000)
116.15451288223267
>>> def replaceutc(s):
... return s\
... .replace('-','') \
... .replace(':','') \
... .replace('.','') \
... .replace(' ','') \
... .strip()
...
>>> t=timeit.Timer('replaceutc(str(datetime.datetime.utcnow()))','''
... from __main__ import replaceutc
... import datetime''')
>>> t.timeit(number=10000000)
77.96774983406067
>>> def sliceutc(s):
... return s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
...
>>> t=timeit.Timer('sliceutc(str(datetime.utcnow()))','''
... from __main__ import sliceutc
... from datetime import datetime''')
>>> t.timeit(number=10000000)
62.378515005111694
python 3.6 이상에서는 python f-string을 사용합니다.
from datetime import datetime
i = datetime.utcnow()
print(f"""{i:%Y-%m-%d %H:%M:%S}.{"{:03d}".format(i.microsecond // 1000)}""")
포맷 밀리초 고유의 코드는 다음과 같습니다.
{"{:03d}".format(i.microsecond // 1000)}
형식 문자열{:03d}
마이크로초에서 밀리초로 변환// 1000
에서 왔다def _format_time
datetime.datetime.isoformat에 사용되는 https://github.com/python/cpython/blob/master/Lib/datetime.py의 명령어입니다.
from datetime import datetime
from time import clock
t = datetime.utcnow()
print 't == %s %s\n\n' % (t,type(t))
n = 100000
te = clock()
for i in xrange(1):
t_stripped = t.strftime('%Y%m%d%H%M%S%f')
print clock()-te
print t_stripped," t.strftime('%Y%m%d%H%M%S%f')"
print
te = clock()
for i in xrange(1):
t_stripped = str(t).replace('-','').replace(':','').replace('.','').replace(' ','')
print clock()-te
print t_stripped," str(t).replace('-','').replace(':','').replace('.','').replace(' ','')"
print
te = clock()
for i in xrange(n):
t_stripped = str(t).translate(None,' -:.')
print clock()-te
print t_stripped," str(t).translate(None,' -:.')"
print
te = clock()
for i in xrange(n):
s = str(t)
t_stripped = s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
print clock()-te
print t_stripped," s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:] "
결과
t == 2011-09-28 21:31:45.562000 <type 'datetime.datetime'>
3.33410112179
20110928212155046000 t.strftime('%Y%m%d%H%M%S%f')
1.17067364707
20110928212130453000 str(t).replace('-','').replace(':','').replace('.','').replace(' ','')
0.658806915404
20110928212130453000 str(t).translate(None,' -:.')
0.645189262881
20110928212130453000 s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
translate()와 슬라이싱 메서드를 동시에 실행
translate()는 한 줄에서 사용할 수 있는 장점을 제시합니다.
첫 번째 항목을 기준으로 시간 비교:
1.000 * t.strftime ('%Y%m%d')%H%M%S%f')
0.351 * str(t).replaceface-'.replace:'.'.replaceface'.'.'.replaceface'.'.replaceface'')
0.198 * str(t).translate(없음', -:.')
0.140* s[:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + s[17:19] + s[20:]
저도 같은 문제에 대처했습니다만, 제 경우는 밀리초가 잘리지 않고 반올림하는 것이 중요했습니다.
from datetime import datetime, timedelta
def strftime_ms(datetime_obj):
y,m,d,H,M,S = datetime_obj.timetuple()[:6]
ms = timedelta(microseconds = round(datetime_obj.microsecond/1000.0)*1000)
ms_date = datetime(y,m,d,H,M,S) + ms
return ms_date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
python -c "from datetime import datetime; print str(datetime.now())[:-3]"
2017-02-09 10:06:37.006
datetime
t = datetime.datetime.now()
ms = '%s.%i' % (t.strftime('%H:%M:%S'), t.microsecond/1000)
print(ms)
14:44:37.134
에 관한 문제datetime.utcnow()
또 다른 해결책은 느리다는 것입니다.
보다 효율적인 솔루션은 다음과 같습니다.
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
3
(밀리초)를 클릭합니다.
합니다(숫자 9자리까지 ).9
두 번째 포맷 문자열)에 표시됩니다.
소수점 부분을 반올림하고 싶다면, 저는 이 부분들을"%.9f"
원하는 소수 자릿수를 사용하여 동적으로 지정합니다.
시간을 변수에 저장하고 문자열 조작을 약간 수행할 준비가 되어 있는 경우 실제로 datetime 모듈을 사용하지 않고 이 작업을 수행할 수 있습니다.
>>> _now = time.time()
>>> print ("Time : %s.%s\n" % (time.strftime('%x %X',time.localtime(_now)),
... str('%.3f'%_now).split('.')[1])) # Rounds to nearest millisecond
Time : 05/02/21 01:16:58.676
>>>
%.3f는 가장 가까운 밀리초 단위로 반올림합니다. 정밀도를 높이거나 낮추려면 소수 자릿수를 변경하십시오.
>>> print ("Time : %s.%s\n" % (time.strftime('%x %X',time.localtime(_now)),
... str('%.1f'%_now).split('.')[1])) # Rounds to nearest tenth of a second
Time : 05/02/21 01:16:58.7
>>>
Python 2.7 및 3.7에서 테스트 완료(버전 2.x에서 인쇄를 호출할 때 괄호는 생략해야 합니다.
필드 폭 포맷 사양
UNIXdate
를 사용하면, 「」를 할 수 있습니다.%3
3월 3일:
$ date '+%Y-%m-%d %H:%M:%S.%3N'
2022-01-01 00:01:23.456
다음은 Python에서 이를 수행할 수 있는 커스텀 함수입니다.
from datetime import datetime
def strftime_(fmt: str, dt: datetime) -> str:
tokens = fmt.split("%")
tokens[1:] = [_format_token(dt, x) for x in tokens[1:]]
return "".join(tokens)
def _format_token(dt: datetime, token: str) -> str:
if len(token) == 0:
return ""
if token[0].isnumeric():
width = int(token[0])
s = dt.strftime(f"%{token[1]}")[:width]
return f"{s}{token[2:]}"
return dt.strftime(f"%{token}")
사용 예:
>>> strftime_("%Y-%m-%d %H:%M:%S.%3f", datetime.now())
'2022-01-01 00:01:23.456'
의:%%
을 사용하다
언급URL : https://stackoverflow.com/questions/7588511/format-a-datetime-into-a-string-with-milliseconds
'IT' 카테고리의 다른 글
SQL Chemy: 서로 다른 데이터베이스 간 결합 및 모듈 내 서로 다른 파일 사용 (0) | 2022.11.18 |
---|---|
OS X의 mariadb 도커 컨테이너: 데이터베이스 디렉토리를 작성할 수 없습니다. (0) | 2022.11.18 |
사전을 사전에 추가하다 (0) | 2022.11.18 |
HTTP에서 PUT, DELETE HTTP 요청을 보내는 방법URL 연결? (0) | 2022.11.18 |
router-link에서 부모 v-on을 소비하는 방법: complete clicked (0) | 2022.11.18 |