Estoy tratando de tomar una cuerda y convertirla en 24 horas. Por ejemplo, si me da la cadena "07:05:45 PM", debería devolver "19:05:45". He completado todas las conversiones necesarias, simplemente no estoy seguro de cómo se supone que las junte y lo haga de modo que si solo hubiera 5 minutos o 5 segundos, colocaría un cero como "xx: 05: 06" .

def timeConversion(s):
    nums = s[:8]
    hh,mm,ss = [v for v in nums.split(":")]
    time = s[8:]
    if time == 'AM':
        return nums
    else:
        total = (int(hh) * 3600 + int(mm) * 60 + int(ss)) + 43200
        if s == "12:00:00PM":
            return nums
        hh = total // 3600
        mm = total // 60 % 60
        ss = total % 60

print(timeConversion("07:05:45PM"))
0
Krish 10 may. 2019 a las 03:41

3 respuestas

La mejor respuesta

Solo las horas y el sufijo tienen algún significado en su salida. La clave es que 12AM es 00, y 12PM es 12. 12:00 no es el único momento que merece este tratamiento: 12:01 también. Use el operador de módulo para evitar cualquier caso especial:

def time_conversion(s):
    hh = int(s[:2]) % 12  # this is the magical part 12->0
    mmss = s[2:8]
    suffix = s[8:].strip().upper()

    if suffix == 'PM':
        hh += 12
    return f'{hh:02d}{mmss}'
2
Mad Physicist 10 may. 2019 a las 01:31

Como se trata de una cadena, quizás la mayor parte del código podría tratar con la cadena.

EDITAR: Código revisado según los comentarios de Mad Physicist

def convert(s):
    if s[8:] == 'AM':
        if s[:2] == '12':
            return '00' + s[2:8]
        else:
            return s[:8]
    elif s[8:] == 'PM':
        if s[:2] == '12':
            return s[:8]
        else:
            return str(int(s[:2])+ 12) + s[2:8]

for t in ['12:00:00AM', '01:01:01AM', '12:01:01PM', '01:10:11PM', '11:20:20PM']:
    print(t, convert(t))

Huellas:

12:00:00AM 00:00:00
01:01:01AM 01:01:01
12:01:01PM 12:01:01
01:10:11PM 13:10:11
11:20:20PM 23:20:20
0
Chris Charley 10 may. 2019 a las 02:01

Aquí está el código de trabajo. Para la entrada "07:05:45 PM", devuelve "19:05:45". Solo necesita agregar un '0' si los valores de minutos o segundos son menores que 10.

def timeConversion(s):
    nums = s[:8]
    hh,mm,ss = [v for v in nums.split(":")]
    time = s[8:]
    if time == 'AM':
        return nums
    else:
        total = (int(hh) * 3600+int(mm)*60+int(ss))+43200
        if s == "12:00:00PM":
            return nums
        hh = str(total//3600)
        mm = total//60 % 60
        ss = total % 60

        mm_str = '0'+ str(mm) if mm <= 9 else str(mm) 
        ss_str = '0'+ str(ss) if ss <= 9 else str(ss)
        time_str = str(hh) + ':' + mm_str + ":" + ss_str

        return time_str 

print(timeConversion("07:05:45PM"))
0
Humayun Kayesh 10 may. 2019 a las 01:03