在Python中将时间从AM / PM格式转换为军事时间

时间:2016-08-27 18:03:26

标签: python

不使用任何库,我正在尝试解决Hackerrank问题“Time Conversion”,其问题陈述将在下面复制。

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”(填充零)。这个实现可能有什么问题?

4 个答案:

答案 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:]

导致它通过所有测试用例(见下文)。

enter image description here

答案 3 :(得分:0)

HtmlRewriter::try_new

事实证明以下链接非常有用:https://strftime.org/