es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo utilizar el módulo de Python para convertir una marca de tiempo no basada en Linux en un número total de segundos?

Tengo una marca de tiempo no estándar (no Linux) presentada como una “str” que necesita ser convertida en un “int” que contenga el número total de segundos que se representan allí.

Mis datos de origen se ven así:

timestr = “1 año 26 semanas 1 día 23 horas 29 minutos”

Puedo extraer fácilmente los diferentes valores de esa cadena y realizar cálculos manuales, pero esperaba que alguno de los módulos de tiempo pudiera hacer el cálculo por mí. Simplemente no puedo encontrar ejemplos de necesitar este cálculo en particular, ya que no me importa la época ni ninguna representación de fecha y hora para mis datos.

Tomando el ejemplo anterior, en mi código estaba planeando asignar los valores de la siguiente manera:

years=1
weeks=26
days=1
hours=23
minutes=29

La respuesta en este caso es 47431740 segundos totales.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, podemos usar el módulo datetime en Python. Primero, podemos crear un objeto timedelta con los diferentes componentes de tiempo que hemos extraído de la cadena de marca de tiempo utilizando el método .split(). Luego, podemos obtener el número total de segundos representados por ese objeto timedelta usando el método .total_seconds().

    Aquí está el código para hacer esto:

    from datetime import timedelta
    
    timestr = "1 año 26 semanas 1 día 23 horas 29 minutos"
    
    # Extraer componentes de tiempo de la cadena
    años, semanas, días, horas, minutos = map(int, timestr.split()[:5])
    
    # Crear objeto timedelta
    delta = timedelta(days=días, weeks=semanas, years=años, hours=horas, minutes=minutos)
    
    # Obtener el número total de segundos
    total_seconds = int(delta.total_seconds())
    
    print(total_seconds)  # salida: 47431740
    

    Comenzamos importando la clase timedelta del módulo datetime. Luego, extraemos los diferentes componentes de tiempo de la cadena timestr y los convertimos en enteros usando map() e int(). Solo extraemos los primeros 5 valores para evitar problemas con componentes opcionales, como los segundos o milisegundos.

    A continuación, creamos un objeto timedelta llamado delta con los valores extraídos como argumentos de palabra clave. Este objeto representa la duración que nos interesa.

    Finalmente, obtenemos el número total de segundos representados por el objeto delta usando el método .total_seconds() y lo convertimos en un entero con int(). Esta es la respuesta final.

    Cabe destacar que este método no se preocupa por la fecha de inicio o fin exacta de la duración, solo por los componentes de tiempo que incluye. Por eso no necesitamos convertir el objeto timedelta en una representación de fecha y hora.

Comments are closed.