2009-12-02 5 views
51

Comment comparer les heures en python?Comparaison de temps Python

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

Répondre

78

Vous ne pouvez pas comparer dans le temps d'un point spécifique (par exemple comme "maintenant") contre un événement récurrent (8h survient tous les jours).

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

>>> 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 
+3

Vous pouvez retourner l'acceptation de la réponse de Pär Wieslander (et en général, attendre quelques minutes de plus que vous: P), car c'est un peu plus spécifique à ce que vous avez demandé. –

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 
7

Vous pouvez comparer datetime.datetime objets directement

Ex:

>>> 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 
>>> 
44

Vous pouvez utiliser la méthode time() de datetime objets pour obtenir le temps de la journée, que vous pouvez utiliser pour la comparaison sans prendre la Date en compte:

>>> 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 
+14

+1. Vous pouvez aussi faire 'now.time()

+1

Assurez-vous de faire 'datetime.datetime.now(). Time()', n'oubliez pas les crochets dans 'now()'! –

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" 
1

Une autre façon de le faire sans ajouter de dépendances ou utiliser datetime consiste simplement à faire des calculs sur les attributs de l'objet temps. 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. Je ne recommande pas de le faire, sauf si vous avez un cas d'utilisation incroyablement simple. Pour tout ce qui nécessite une connaissance du fuseau horaire ou la connaissance des dates, vous devriez utiliser datetime.