Básicamente tengo la inversa de este problema: Python Tiempo de Segundos a h:m:s

Tengo una cadena en el formato H:MM:SS (siempre 2 dígitos para los minutos y segundos), y necesito el número entero de segundos que representa. ¿Cómo puedo hacer esto en python?

Por ejemplo:

  • «1:23:45» produciría una salida de 5025
  • «0:04:15» se iba a producir una potencia de 255
  • «0:00:25» produciría una salida de 25

etc

InformationsquelleAutor hughes | 2011-06-19

10 Comentarios

  1. 69
    def get_sec(time_str):
        """Get Seconds from time."""
        h, m, s = time_str.split(':')
        return int(h) * 3600 + int(m) * 60 + int(s)
    
    
    print(get_sec('1:23:45'))
    print(get_sec('0:04:15'))
    print(get_sec('0:00:25'))
    • La elegancia sin sacrificar la legibilidad. El amor es.
  2. 44
    t = "1:23:45"
    print(sum(int(x) * 60 ** i for i,x in enumerate(reversed(t.split(":")))))

    El ejemplo actual, elaborado:

        45 × 60 = 45 ×    1 =   45
        23 × 60¹ = 23 ×   60 = 1380
         1 × 60² =  1 × 3600 = 3600
    • Esto es realmente una técnica interesante. Gracias por compartir esto.
    • Lo que hace que el doble de estrellas operador hacer?
    • La exponenciación.
    • Este código también se encargará de la s y m:s cadenas como «53» y «2:41» correctamente
    • Es allí una manera de hacer este trabajo con los días?
  3. 8

    Utilizando el módulo datetime

    import datetime
    t = '10:15:30'
    h,m,s = t.split(':')
    print(int(datetime.timedelta(hours=int(h),minutes=int(m),seconds=int(s)).total_seconds()))

    De salida: 36930

    • ¿Qué hace la salida de su código como el OP ejemplo de entrada?
    • Usted no necesita re para esto. Las cuerdas tienen un método split: str.split(). Mucho más limpio de usar sólo t.split(':') en lugar de re.split(':', t).
  4. 2

    Se puede dividir el tiempo en una lista y agregar a cada individuo componente de tiempo, multiplicando las horas de componentes por 3600 (el número de segundos en una hora) y el componente minutos por 60 (número de segundos en un minuto), como:

    timeInterval ='00:35:01'
    list = timeInterval.split(':')
    hours = list[0]
    minutes = list[1]
    seconds = list[2]
    total = (int(hours) * 3600 + int(minutes) * 60 + int(seconds))
    print("total = ", total)
  5. 1
    parts = time_string.split(":")
    seconds = int(parts[0])*(60*60) + int(parts[1])*60 + int(parts[2])
    • Casi funcionó, tuve que usar int(…) como taskinoor sugerido para que funcione correctamente.
    • Me di cuenta de que, justo antes de que vi tu comentario, lo siento
  6. 1

    Sin muchos controles, y asumiendo que se trata de «SS» o «MM:SS» o «HH:MM:SS» (aunque no necesariamente de dos dígitos por parte):

    def to_seconds(timestr):
        seconds= 0
        for part in timestr.split(':'):
            seconds= seconds*60 + int(part)
        return seconds

    Esta es una diferente «ortografía» de la FMc de la respuesta 🙂

  7. 1

    No me gusta ninguna de las respuestas posibles, así que he usado el siguiente:

    def timestamp_to_seconds(t):
        return sum(float(n) * m for n,
                   m in zip(reversed(time.split(':')), (1, 60, 3600))
                   )
  8. 0

    Otra alternativa si tienes días en cadena:

    def duration2sec(string):
        if "days" in string:
            days = string.split()[0]
            hours = string.split()[2].split(':')
            return int(days) * 86400 + int(hours[0]) * 3600 + int(hours[1]) * 60 + int(hours[2])
        else:
            hours = string.split(':')
            return int(hours[0]) * 3600 + int(hours[1]) * 60 + int(hours[2])
    • La pregunta para la conversión de H:MM:SS tiempo de la cadena de segundos para no convertir los días a las secs. Por favor tratar de reformular su respuesta para la pregunta
    • El ejemplo es funcional, else parte que hará. Pero estoy de acuerdo en que, cuanto más simple, mejor.
  9. 0

    Ampliando @FMc de la solución que representa la mitad de El método de Horner. La ventaja del método de Horner: Saltar revertir la lista, evitar el poder cálculo.

    from functools import reduce
    
    timestamp = "1:23:45"
    reduce(lambda sum, d: sum * 60 + int(d), timestamp.split(":"), 0)

Dejar respuesta

Please enter your comment!
Please enter your name here