Comment comparer les temps en Python?


98

Je vois que des comparaisons de dates peuvent être faites et il y en a aussi datetime.timedelta(), mais j'ai du mal à savoir comment vérifier si l'heure actuelle ( datetime.datetime.now()) est antérieure, postérieure ou identique à une heure spécifiée (par exemple 8h) quelle que soit la date.


1
Je ne suis pas sûr de mettre cela comme une réponse, mais je l'ai mis ici en commentaire: étonnamment, j'ai trouvé que Python accepte les comparaisons comme '23:23:00' > '23:59:00'ou '23:23:00' > '23:09:22', tout comme vous le feriez entre deux datetime.datetime.now().strftime('%H:%M')valeurs. Est-ce le meilleur moyen de comparer les temps? Je ne sais pas. Est-ce que ça marche? Autant que j'ai testé, cela a bien fonctionné. Mais certainement (et bien sûr): aucune chance de l'utiliser avec une chaîne datetime contenant des mois, des jours de la semaine.
ivanleoncz le

Réponses:


128

Vous ne pouvez pas comparer un moment précis dans le temps (tel que «maintenant») à un événement récurrent non résolu (8 heures du matin se produisent tous les jours).

Vous pouvez vérifier si c'est maintenant avant ou après 8 heures du matin:

>>> import datetime
>>> now = datetime.datetime.now()
>>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0)
>>> now < today8am
True
>>> now == today8am
False
>>> now > today8am
False

4
Vous voudrez peut-être retourner l'acceptation à la réponse de Pär Wieslander (et généralement attendre quelques minutes de plus que vous ne l'avez fait: P), car c'est un peu plus spécifique à ce que vous avez demandé.

65

Vous pouvez utiliser la time()méthode des datetimeobjets pour obtenir l'heure de la journée, que vous pouvez utiliser à des fins de comparaison sans prendre en compte la date:

>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30)
>>> last_night = datetime.datetime(2009, 12, 1, 20, 0)
>>> this_morning.time() < last_night.time()
True

2
Assurez-vous de le faire datetime.datetime.now().time(), n'oubliez pas les crochets now()!
Jose Salvatierra

10

Vous pouvez comparer directement les objets datetime.datetime

Par exemple:

>>> a
datetime.datetime(2009, 12, 2, 10, 24, 34, 198130)
>>> b
datetime.datetime(2009, 12, 2, 10, 24, 36, 910128)
>>> a < b
True
>>> a > b
False
>>> a == a
True
>>> b == b
True
>>> 

4

Inspiré par Roger Pate:

import datetime
def todayAt (hr, min=0, sec=0, micros=0):
   now = datetime.datetime.now()
   return now.replace(hour=hr, minute=min, second=sec, microsecond=micros)    

# Usage demo1:
print todayAt (17), todayAt (17, 15)

# Usage demo2:    
timeNow = datetime.datetime.now()
if timeNow < todayAt (13):
   print "Too Early"

2

Une autre façon de faire cela sans ajouter de dépendances ou utiliser datetime consiste simplement à faire des calculs sur les attributs de l'objet temps. Il comporte des heures, des minutes, des secondes, des millisecondes et un fuseau horaire. Pour des comparaisons très simples, les heures et les minutes devraient être suffisantes.

d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second

Je ne recommande pas de faire cela à moins que vous n'ayez un cas d'utilisation incroyablement simple. Pour tout ce qui nécessite une connaissance du fuseau horaire ou une connaissance des dates, vous devez utiliser datetime.


1

datetime ont une capacité de comparaison

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False


1

Vous pouvez utiliser la fonction Timedelta pour une comparaison d'augmentation de temps x.

>>> import datetime 

>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min 

False

Juste Une combinaison de ces réponses cette Et Roger

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.