2013-01-15 2 views
2

'HH : MM'과 같이 문자열 형식의 시간 데이터를 가져오고 있습니다 (예 : '13 : 33 '은 13 시간 33 분).문자열을 datime.time으로 변환 하시겠습니까?

그래서, 시간 객체를 얻기 위해이 코드를 사용하고는 지금 새 problem.New 문자열을 24 시간 이상 및 datetime.datetime.strptime('25:33', '%H:%M').time() 것이다 단순히 fail.What 년대를 대표하는 오기 시작이,

datetime.datetime.strptime('13:33', '%H:%M').time() 

그러나 좋은 작품 당신의 제안?

+3

제안? 당신은 무엇을 얻을 것으로 예상합니까? '25 : 33'은 시간이 없다. – Eevee

+1

기다려, 미안, 무슨 말인지 알 겠어. 스톱워치처럼 _amount_ 시간을 원하십니까? – Eevee

답변

0

"간단히 실패 할 것"이라고 말하면 실패 할 때를 알고 싶다고 가정합니다. 하나의 접근 방법은 다음과 같습니다.

>>> import datetime 
>>> 
>>> time_strs = [ 
... "13:33", 
... "25:33", 
... "12:88" 
... ] 
>>> 
>>> for s in time_strs: 
...  try: 
...   print datetime.datetime.strptime(s, '%H:%M').time() 
...  except ValueError: 
...   print "Bad time: {0}".format(s) 
... 
13:33:00 
Bad time: 25:33 
Bad time: 12:88 
0

수동으로해야합니다.

def parse_stopwatch(s): 
    hours, minutes = s.split(':', 1) 
    return datetime.time(hour=int(hours), minute=int(minutes)) 

이것은 실제로 벙어리입니다. 자동으로 60 분 이상 시간으로 변환하거나, 정규 표현식을 사용하거나, 수일 또는 수 초간 지원을 추가 할 수 있습니다. 그러나 당신은이 데이터가 어디서오고, 무엇이 표현되어야하는지에 대해 조금 더 구체적이어야합니다. :)

+0

죄송합니다. 그것을 수정했습니다. – Eevee

1

datetime.time 개체는 특정 일과 무관하게 일 (현지 시간) 시간을 나타냅니다.

시간이 오래 걸리는 것처럼 보일 때는 사용하지 마십시오.

더 적절한는 datetime.timedelta 수 있습니다 :

timedelta 객체 은 기간을 나타냅니다, 두 날짜 또는 시간의 차이.

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

모든 인수의 int, 걷고, 또는 수레 될 수 선택하고 0 인수에 기본이며, 양수 또는 음수가 될 수 있습니다.

예 : 무엇을위한

>>> from datetime import timedelta 
>>> d = timedelta(hours=25,minutes=10) 
>>> d 
datetime.timedelta(1, 4200) #Days, seconds 
관련 문제