J'ai un objet de type datetime.time
. Comment est-ce que je convertis ceci en un int représentant sa durée en secondes? Ou à une chaîne, que je peux ensuite convertir en une seconde représentation en scindant?
Vous devez convertir votre objet datetime.time
en un datetime.timedelta
pour pouvoir utiliser total_seconds()
function.
Il retournera une float
plutôt qu'un int comme le demande la question, mais vous pouvez le lancer facilement.
>>> from datetime import datetime, date, time, timedelta
>>> timeobj = time(12, 45)
>>> t = datetime.combine(date.min, timeobj) - datetime.min
>>> isinstance(t, timedelta)
# True
>>> t.total_seconds()
45900.0
Des liens qui m'inspirent:
Vous pouvez le calculer vous-même:
from datetime import datetime
t = datetime.now().time()
seconds = (t.hour * 60 + t.minute) * 60 + t.second
Si votre objet est censé représenter une durée, vous devez utiliser un datetime.timedelta
au lieu d'un datetime.time
.
Les objets datetime.time sont censés représenter une heure du jour.
Les objets datetime.timedelta sont censés représenter une durée et ont une méthode total_seconds()
qui fait exactement ce que vous voulez.
Comme @Owl Max a proposé le moyen le plus simple d’obtenir une représentation entière d’une heure est d’utiliser un timedelta. Bien que, je voudrais partager une manière différente de construire le timedelta.
Un one-liner utile que j'aime utiliser est:
import datetime
t = datetime.time(10, 0, 5)
int(datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second).total_seconds())
(ps. Normalement, ce serait un commentaire)