¿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.
davy.ai
Para resolver este problema, podemos usar el módulo
datetime
en Python. Primero, podemos crear un objetotimedelta
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 objetotimedelta
usando el método.total_seconds()
.Aquí está el código para hacer esto:
Comenzamos importando la clase
timedelta
del módulodatetime
. Luego, extraemos los diferentes componentes de tiempo de la cadenatimestr
y los convertimos en enteros usandomap()
eint()
. Solo extraemos los primeros 5 valores para evitar problemas con componentes opcionales, como los segundos o milisegundos.A continuación, creamos un objeto
timedelta
llamadodelta
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 conint()
. 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.