Comment ajouter delta de python datetime.de temps?
À partir de:
http://docs.python.org/py3k/library/datetime.html#timedelta-objects
Un timedelta objet représente une durée, la différence entre les deux
des dates ou des heures.
Alors pourquoi je reçois l'erreur: la
>>> from datetime import datetime, timedelta, time
>>> datetime.now() + timedelta(hours=12)
datetime.datetime(2012, 9, 17, 6, 24, 9, 635862)
>>> datetime.now().date() + timedelta(hours=12)
datetime.date(2012, 9, 16)
>>> datetime.now().time() + timedelta(hours=12)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
Vous devez vous connecter pour publier un commentaire.
datetime.time
objets ne prennent pas en charge plus avecdatetime.timedelta
s.Il y a une définition naturelle cependant, l'horloge de l'arithmétique.
On peut calculer comme ceci:
dt.datetime.combine(...)
ascenseurs datetime.tempst
à undatetime.datetime
objet, le delta est ensuite ajouté, et le résultat est tombé vers le bas pour undatetime.time
objet.t
est plus petit quedelta
, alors, vous allez vous retrouver avecdt.date(1,1,0)
, qui est unOverflowError: date value out of range
. Une façon d'aborder cette question consiste à augmenter les valeurs dansdt.date(...)
. Mais c'est toujours une question qu'on doit être prudent avec.Toutes les solutions ci-dessus sont trop compliquées, OP avait déjà montré que nous pouvons faire le calcul entre
datetime.datetime
etdatetime.timedelta
, alors pourquoi ne pas simplement faire:(datetime.now() + timedelta(hours=12)).time()
Comment serait-il?
datetime.datetime.now().time()
retourne uniquement les heures, les minutes, les secondes et ainsi de suite, il n'y a pas de date de l'information que.time()
retourne, seul le temps.Alors que
18:00:00 + 8 hours
retour?Il n'y a pas de réponse à cette question, et c'est pourquoi vous ne pouvez pas ajouter de temps et un timedelta.
En d'autres termes:
.time()
ne retourne pas un timestamp -- timestamp comprend souvent suffisamment d'information pour établir une date, undatetime.time
objet ne l'est pas.Voici une fonction qui ajoute un
time
à untimedelta
:Ce qui permettra d'obtenir le résultat escompté, tant que vous n'ajoutez pas de temps dans un chemin qui traverse un minuit limite.
Un datetime.le temps de l'objet peuvent être scindées en entier composants que vous pouvez ajouter.
Pas besoin de timedelta par exemple:
ValueError
. Il est plus facile de simplement utiliser datetime au lieu de temps quand on fait l'addition. J'ai eu des cas d'utilisation où je viens de faire un mannequindatetime.datetime(1, 1, 1, hour, minute)
ne le timedelta plus et ensuite de les convertir à temps.