web-dev-qa-db-fra.com

Conversion de datetime.time en secondes

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?

5
Bluefire

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:

8
Owl Max

Vous pouvez le calculer vous-même:

from datetime import datetime

t = datetime.now().time()
seconds = (t.hour * 60 + t.minute) * 60 + t.second
8
bakatrouble

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.

4
Thierry Lathuille

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) 

1
Kostas