不使用任何库,我正在尝试解决Hackerrank问题“Time Conversion”,其问题陈述将在下面复制。
我想出了以下内容:
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:]
但是,这在一个测试用例中失败了:
然而,由于测试用例对用户是隐藏的,因此我很难看到问题发生的位置。 “12:00:00 AM”正确转换为“00:00:00”,“01:00:00 AM”转换为“01:00:00”(填充零)。这个实现可能有什么问题?
答案 0 :(得分:5)
它比你拥有它更简单。
hour = int(time[:2])
meridian = time[8:]
if (hour == 12):
hour = 0
if (meridian == 'PM'):
hour += 12
print("%02d" % hour + time[2:8])
答案 1 :(得分:3)
你已经解决了这个问题,但这是另一个可能的答案:
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库: - )
答案 2 :(得分: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:]
导致它通过所有测试用例(见下文)。
答案 3 :(得分:0)
HtmlRewriter::try_new
事实证明以下链接非常有用:https://strftime.org/