2016-08-27 137 views
1

沒有使用任何庫,我試圖解決Hackerrank問題「Time Conversion」,其問題聲明在下面複製。在Python中將時間從AM/PM格式轉換爲軍事時間

enter image description here

我想出了以下內容:

time = raw_input().strip() 

meridian = time[-2:]  # "AM" or "PM" 
time_without_meridian = time[:-2] 
hour = int(time[:2]) 

if meridian == "AM": 
    hour = (hour+1) % 12 - 1 
    print ("%02d" % hour) + time_without_meridian[2:] 
elif meridian == "PM": 
    hour += 12 
    print str(hour) + time_without_meridian[2:] 

然而,這種失敗的一個測試用例:

enter image description here

由於測試用例對用戶隱藏但是,我正在努力查看問題的發生地點。 「12:00:00 AM」正確轉換爲「00:00:00」,並且「01:00:00 AM」至「01:00:00」(填充零)。這個實現有什麼問題?

回答

3

這比如何更簡單你擁有了它。

hour = int(time[:2]) 
meridian = time[8:] 
if (hour == 12): 
    hour = 0 
if (meridian == 'PM'): 
    hour += 12 
print("%02d" % hour + time[2:8]) 
0

我想通了:它將「12:00:00 PM」轉換爲「24:00:00」而不是「12:00:00」。我修改代碼如下:

time = raw_input().strip() 

meridian = time[-2:]  # "AM" or "PM" 
time_without_meridian = time[:-2] 
hour = int(time[:2]) 

if meridian == "AM": 
    hour = (hour+1) % 12 - 1 
    print ("%02d" % hour) + time_without_meridian[2:] 
elif meridian == "PM": 
    hour = hour % 12 + 12 
    print str(hour) + time_without_meridian[2:] 

導致它通過所有測試用例(見下文)。

enter image description here

2

你已經解決了這個問題,但這裏的另一個可能的答案:

from datetime import datetime 


def solution(time): 
    return datetime.strptime(time, '%I:%M:%S%p').strftime('%H:%M:%S') 


if __name__ == '__main__': 
    tests = [ 
     "12:00:00PM", 
     "12:00:00AM", 
     "07:05:45PM" 
    ] 
    for t in tests: 
     print solution(t) 

雖然它會使用一個Python庫:-)