web-dev-qa-db-fra.com

Python)

Comment comparer les temps en python?

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

77
Steve Jay

Vous ne pouvez pas comparez un moment précis (tel que "maintenant") avec un événement récurrent non fixé (8h du matin tous les jours).

Vous pouvez vérifier si c'est maintenant avant ou après aujourd'hui 8h:

>>> 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
104
Roger Pate

Vous pouvez utiliser la méthode time() de datetime objets pour obtenir l'heure du jour, 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
54
Pär Wieslander

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
>>> 
9
Kimvais

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"
4
AndrewR

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

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

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

1
Thomas Dignan

datetime ont la 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
luc