2017-04-30 13 views
0

내 문제에 대한 해결책은 거의 발견되지 않았습니다. 모두 문제가 많았지 만 시도해 볼 때 프로그램이 충돌합니다.시간 문자열을 밀리 초 정밀도로 조작

그래서 문자열을 datetime 개체로 변환 한 다음 시간을 더하거나 뺍니다. 모든 문자열은 00 시간, 00 분, 40 초 및 249 밀리 초를 나타내는 동일한 구조 -> 00 : 00 : 40,249 (예)를 공유합니다. datetime 객체로 변환하면 다음과 같이 표시됩니다.

00 : 00 : 40.249000 (여분의 0은 0으로 표시됩니다).

동일한 형식으로 시간을 가져 오려면이 3 개의 0을 제거해야합니다.

내가 발견 한 모든 해결책은 꽤 간단했습니다. 내 코드 오늘 :

datetime.datetime.strptime(line.partition(saparator)[0], '%H:%M:%S,%f').time() 

용액은 내가 찾은 :

형식 오류 : 나는 그래서 난 다음 어떻게해야합니까

datetime.datetime.strptime(line.partition(saparator)[0], '%H:%M:%S,%f').time()[:-3] 

'datetime.time'개체가 첨자에되지

또 다시,이 해결책은 upvoted이고 사용자에게서 많은 감사를 얻었 는가, 어떻게 오지 않는가?

감사합니다.

+0

는 '이 존재하지 않는 밀리를 사용하지 않는 datetime.time' 목적은 가능한 유일한 특성 이것은이 [XY 증상 (HTTPS 인 세 개의 추가 제로 – abccd

+0

을 갖는 마이크로 초 /meta.stackexchange.com/questions/66377/what-is-the-xy-problem), 우리는 당신의 코드와 실제로하려는 것을 보여줘야한다. –

답변

1

문자열 대신 datetime 개체를 분할하려고합니다.

변수를 문자열로 캐스팅 한 다음 슬라이스 할 수 있습니다. 문서 here으로 당

는 :

time.isoformat() 

이 문자열로 시간을 반환합니다.

0

그와 같은 문자열은 적어도 나에게 시간 경과 또는 시간 간격처럼 보입니다. 그렇다면 timedelta 개체를 사용하여 제안하는 것이 좋습니다. 이렇게하는 것의 한 가지 장점은 임의의 시간 간격을 더하거나 뺍니다.

첫 번째 변환 : 정규식을 사용하여 문자열에서 항목을 분할하도록 선택했지만 물론 가장 편리하다고 생각되는 기술을 사용할 수도 있습니다. 먼저 timedelta 생성 함수에 대한 모든 매개 변수에 대한 사전을 작성하여 timedelta_args으로 시작합니다. 그런 다음이 사전의 선택된 항목을 정규식을 사용하여 문자열에서 구문 분석 한 값으로 바꿉니다. 그런 다음이 함수가 예상하는 순서대로 값을 넣으 려서 사전의 모든 값을 timedelta으로 전달합니다. timespan의 값은 속성 값과 마찬가지로 내가 원했던 값입니다. 밀리 초 1,000 이상의 I은 쉽게 원래의 문자열을 얻을 수 같이

>>> from datetime import timedelta 
>>> import re 
>>> s = '00:00:40,249' 
>>> timedelta_args = {'days':0, 'seconds':0, 'microseconds':0, 'milliseconds':0, 'minutes':0, 'hours':0, 'weeks':0} 
>>> timedelta_args['hours'], timedelta_args['minutes'], timedelta_args['seconds'], timedelta_args['milliseconds'] = map(int, re.split(r'[:,]', s)) 
>>> timespan = timedelta(*[timedelta_args[_] for _ in ['days', 'seconds', 'microseconds', 'milliseconds', 'minutes', 'hours', 'weeks']]) 
>>> timespan 
datetime.timedelta(0, 40, 249000) 
>>> timespan.seconds 
40 
>>> timespan.microseconds 
249000 

나는만큼 쉽게 timespan의 스트링 표현을 획득하고있다.timespan 이후

>>> str(timespan) 
'0:00:40.249000' 
>>> str(timespan)[:-3] 
'0:00:40.249' 
>>> str(timespan)[:-3].replace('.', ',') 
'0:00:40,249' 

내가 그것을 추가 (그리고 그것에서 빼기) 할 수있는 timedelta입니다. 원시 결과는 매우 만족스럽지 않을 수 있습니다. 그러나이 기능은 곧 str 기능을 보완합니다.

>>> timespan + timedelta(hours=3, seconds=20) 
datetime.timedelta(0, 10860, 249000) 
>>> str(timespan + timedelta(hours=3, seconds=20)) 
'3:01:00.249000' 

서식을 지정할 때 상당히 사소한 장애가 있음을 유의하십시오. microseconds 속성이 0이면 문자열 표현으로 완전히 해제됩니다./:

>>> str(timespan + timedelta(hours=3, microseconds=751000)) 
'3:00:41'