2012-07-02 3 views
4

나는 사람이 읽을 수있는 시간을 datetime 개체로 변환하려고합니다. 이를 위해 datetime.datetime.strptime을 사용하고 있습니다.python datetime.strptime : 초의 일부분 무시

그러나 간단히 말해서, 내가 읽을 수있는 시간에는 초를 포함하고 있습니다. 나는 그것을 파싱 할 수 없습니다. 이것이 상수라면 형식의 일부로 통합 할 수 있습니다. 그러나 상수가 아니기 때문에 그렇게 할 수 없습니다.

>>> humanTime = '2012/06/10T16:36:20.509Z' 
>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%SZ") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "lib/python2.7/_strptime.py", line 325, in _strptime 
    (data_string, format)) 
ValueError: time data '2012-06-10T16:36:20.507Z' does not match format '%Y-%m-%dT%H:%M:%SZ' 

그래서 내가 여기에 문제가 두 번째의 분율이 구문 분석되지 있다는 것을 파악 :

이것은 내가 지금 뭘하는지입니다. 나는 그 두 번째 부분에 대해서는별로 신경 쓰지 않는다. 문자열을 잘라내는 것만으로도, datetime에 두 번째 부분을 무시하도록 요청할 수있는 방법이 있습니까?

나는 아주 기본적인 것을 놓칠지도 모른다는 느낌이 들었습니다. 나는 어떤 도움을 주셔서 감사합니다.

+1

@downvoter : 내 질문이 왜 나쁜지 말해 주시겠습니까? – inspectorG4dget

답변

4

저는 실제로 초의 분수는 신경 쓰지 않기 때문에 사람이 읽을 수있는 문자열의 첫 번째 문자 인 19을 가져 와서 간단한 형식을 적용해야합니다. 특정 문제에 대한

>>> humanTime = '2012/06/10T16:36:20.509Z' 
>>> datetime.datetime.strptime(humanTime[:19], "%Y/%m/%dT%H:%M:%S") 
datetime.datetime(2012, 6, 10, 16, 36, 20) 
3

해결 방법 : 마이크로에 대한 %의 F를 사용 :

>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%S.%fZ") 

그러나 문제는 일반적인 경우에이 아직도있다. 점 뒤에 6 자리 이상 있으면,이 솔루션은 작동하지 않습니다.

제 생각에 문제는 datetime.datetime.strptime에서 허용하는 형식에는 일반적으로 부동 초가 포함되지 않습니다. 이 문제를 해결하려면 datetime 변수를 만들 때 초를 무시한 다음 datetime.timedelta를 사용하여 초를 추가하십시오.

>>> import numpy as np 
>>> import datetime 
>>> 
>>> humanTime = '2012/06/10T16:36:20.509Z' 
>>> dt_time_no_seconds = datetime.datetime.strptime(humanTime[:-8], "%Y/%m/%dT%H:%M") 
>>> seconds = np.float(humanTime[-7:-1]) 
>>> dt_time = dt_time_no_seconds+datetime.timedelta(seconds=seconds) 
>>> dt_time_no_seconds 
datetime.datetime(2012, 6, 10, 16, 36) 
>>> dt_time 
datetime.datetime(2012, 6, 10, 16, 36, 20, 509000) 

희망이 있습니다.

관련 문제