Tengo un objeto datetime.time como 02:00:00, me gustaría convertirlo al total de segundos, que debería ser de 7200 segundos.

-1
StackUser 13 jul. 2021 a las 11:39

3 respuestas

La mejor respuesta

Puede combinar la hora con una fecha de referencia para obtener un objeto de fecha y hora. Si luego resta esa fecha de referencia, obtiene un objeto timedelta, del cual puede tomar el total_seconds:

from datetime import datetime, time

t = time(2,0,0)

ts = (datetime.combine(datetime.min, t) - datetime.min).total_seconds()

print(ts)
# 7200.0

Con pandas, usaría la representación de cadena de la columna del objeto de tiempo (Serie) y la convertiría al tipo de datos timedelta, que luego le permite usar el acceso dt para obtener el total de segundos:

import pandas as pd

df = pd.DataFrame({'time': [time(2,0,0)]})

df['totalseconds'] = pd.to_timedelta(df['time'].astype(str)).dt.total_seconds()

# df['totalseconds']
# 0    7200.0
# Name: totalseconds, dtype: float64
3
MrFuppes 13 jul. 2021 a las 09:45

Pruebe este método; el parámetro 'tiempo' debe estar en el formato hh: mm: ss

def convert_to_seconds(time):
    # Separate all symbols of 'time'
    separated = list(time)
    
    # Delete all ':' symbols
    for i in separated:
        if i == ':':
            separated.remove(i)
    
    # Join the elements of the list together two by two
    separated[0] = separated[0] + separated[1]
    separated[1] = separated[2] + separated[3]
    separated[2] = separated[4] + separated[5]
    
    # Delete the last 3 elements of the list that are useless now
    for count in range(3):
        del l[3]
    
    # Convert to integers
    for i in separated:
        separated[separated.index(i)] = int(i)

    # Calculate seconds
    seconds = 0
    seconds += separated[0] * 3600
    seconds += separated[1] * 60
    seconds += separated[2]

    return seconds

Es un poco más largo que el método anterior, pero un poco más sencillo de entender.

0
Lvn Rtg 13 jul. 2021 a las 09:33

Puede calcular con el uso de la biblioteca de fecha y hora

def time_in_ms():
    from datetime import datetime
    now = datetime.now()
    time_arr = now.strftime("%H:%M:%S").split(":")
    total_time = (int(time_arr[0]) * 3600) + (int(time_arr[1]) * 60) +(int(time_arr[2]))
    return total_time
0
yunus 13 jul. 2021 a las 09:05