奇怪的python3字符串行为

问题描述 投票:0回答:1

这里是将12小时时间格式转换为24小时格式的代码。除了12小时时间AM(1:00:00到11:59:59)很奇怪,只返回0之外,一切都很正常。

代码是 。

def timeConversion(s):
    times = s.split(":")
    hour = int(times[0])
    minutes = times[1]
    seconds = times[2][:-2]
    timemod = times[-1][2:]

    military_hour=0


    if timemod=="AM" : 

        if hour == 12 : 

            miltary_hour = 0
        else:
            miltary_hour = hour

    elif timemod == "PM" : 

        if hour == 12 : 
            military_hour = hour
        else:
            military_hour = hour + 12



    if military_hour < 10 : 
        military_hour = "0" + str(military_hour)
    else:
        military_hour = str(military_hour)


    return ":".join([military_hour,minutes,seconds])

## below 2 are incorrect 
print(timeConversion("9:30:10AM"))
print(timeConversion("6:00:00AM"))

## these are correct 
print(timeConversion("12:00:00AM"))
print(timeConversion("12:00:00PM"))
print(timeConversion("11:59:59PM"))

解决方案是

00:30:10                                                                                                                                                                                                                   
00:00:00                                                                                                                                                                                                                   
00:00:00                                                                                                                                                                                                                   
12:00:00                                                                                                                                                                                                                   
23:59:59

为什么AM时间在中午之前总是返回00而不是实际的小时?

python-3.x string
1个回答
2
投票

你拼错了 military_hourAM 逻辑。

在这里,你可以试试这样:

if timemod=="AM" : 
    if hour == 12 : 
        miltary_hour = 0
    else:
        miltary_hour = hour

-1
投票

你可以试试这个

time_12 = input().strip()
time_in_pm = time_12[-2:].lower() == 'pm'
time_list = list(map(int, time_12[:-2].split(':')))
if not time_in_pm and time_list[0] == 12:
    time_list[0] = 0
if time_in_pm and time_list[0] < 12:
    time_list[0] += 12
print(':'.join(map(lambda x: str(x).rjust(2, '0'), time_list)))

或者你也可以用python的日期时间库。

© www.soinside.com 2019 - 2024. All rights reserved.