2013-03-04 2 views
1

"12:30"또는 "5:51:23"과 같은 문자열을 파이썬에서 경과 된 시간을 나타내는 십진수로 변환하려면 어떻게해야합니까?시간 문자열을 10 진수로 변환 하시겠습니까?

+0

현재 질문 및 중복 주소를 다른 문제로 표시된 하나. 중복 질문에 대해 게시 된 솔루션은 불완전한 시간 문자열 ex 12:30을 처리하지 않습니다. 재 개설을위한 투표 – Abhijit

답변

2

아주 간단한 문자열 분할 및 수학 :

def time_string_to_decimals(time_string): 
    fields = time_string.split(":") 
    hours = fields[0] if len(fields) > 0 else 0.0 
    minutes = fields[1] if len(fields) > 1 else 0.0 
    seconds = fields[2] if len(fields) > 2 else 0.0 
    return float(hours) + (float(minutes)/60.0) + (float(seconds)/pow(60.0, 2) 

단 하나의 번호가 "3" 같이 주어진다면,이 3.0를 반환합니다. 두 개의 콜론으로 분리 된 값이 "4:57"처럼 주어지면 4.95을 반환합니다. 콜론으로 구분 된 세 개의 값이 "14:36:27"과 같이 주어지면 14.6075이 반환됩니다.

0
>>> float('5:51:23'.split(':')[0]) 
5.0 
+0

OP의 자기 대답에서 나는 이것이 충분하지 않다고 생각합니다. –

+0

궁극적으로 그가 대답이 그가 원하는 것인가를 결정할 것입니다. 이 경우 나는 엄격하게 요구 사항과 [KISS 원리] (http://en.wikipedia.org/wiki/KISS_principle)를 따르고 있습니다. –

1

가능한 해결 방법

>>> time_st = ["12:30" , "5:51:23"] 
>>> HMS = [60*60, 60, 1] 
>>> for t in time_st: 
    dec_time = sum(a * b for a,b in zip(HMS, map(int, t.split(":")))) 
    dec_time /= 3600. 
    print "{} = {}".format(t, dec_time) 


12:30 = 12.5 
5:51:23 = 5.85638888889 
00:00 = 0.0 
23:59 = 23.9833333333 
+0

HMS를 [1, 1.0/60, 1.0/3600]으로 변경하면 dec_time이 시간 단위로 표시됩니다. 3600에 의한 분류는 요구되지 않을 수도 있습니다. – shantanoo

관련 문제