2009-12-02 4 views
51

Wie vergleiche ich mal in Python?Python Zeitvergleich

Ich sehe, dass Datum Vergleiche durchgeführt werden können und es gibt auch "Timedelta", aber ich habe Mühe herauszufinden, wie die aktuelle Zeit (von datetime.now()) früher, gleich oder später ist als eine bestimmte Zeit (z. B. 8 Uhr) unabhängig vom Datum.

Antwort

78

Sie nicht einen bestimmten Zeitpunkt zu vergleichen (z als "gerade jetzt") gegen ein unfixiertes, wiederkehrendes Ereignis (8 Uhr passiert jeden Tag).

Sie können, wenn überprüfen nun vor oder nach 08.00 Uhr ist die heutige:

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

Vielleicht möchten Sie die Antwort auf die Antwort von Pär Wieslander umdrehen (und sollte in der Regel ein paar Minuten länger warten als Sie: P), da es genauer ist, was Sie genau gefragt haben. –

1

Datumzeit haben Vergleichsmöglichkeit

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

Sie datetime.datetime Objekte direkt vergleichen können

ZB:

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

Sie die time() Methode der datetime Objekte verwenden können, die Tageszeit zu erhalten, die Sie für den Vergleich verwenden können, die ohne Rück Datum Rechnung:

>>> 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. Sie können auch 'now.time()

+1

Stellen Sie sicher, datetime.datetime.now(). Time() ', vergessen Sie nicht die Klammern in' now() '! –

4

Inspiriert von 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

Eine andere Möglichkeit, dies zu tun, ohne Abhängigkeiten hinzuzufügen oder datetime zu verwenden, besteht darin, einfach die Attribute des Zeitobjekts zu berechnen. Es hat Stunden, Minuten, Sekunden, Millisekunden und eine Zeitzone. Für sehr einfache Vergleiche sollten Stunden und Minuten ausreichend sein.

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

Ich empfehle das nicht, es sei denn, Sie haben einen unglaublich einfachen Anwendungsfall. Für alles, das Zeitzonenbewusstsein oder Datenbewusstsein erfordert, sollten Sie datetime verwenden.