Wie vergleiche ich Zeiten in Python?


97

Ich sehe, dass Datumsvergleiche durchgeführt werden können und es gibt auch datetime.timedelta() , aber ich habe Schwierigkeiten herauszufinden, wie ich überprüfen kann, ob die aktuelle Zeit ( datetime.datetime.now()) früher, später oder gleich einer bestimmten Zeit (z. B. 8 Uhr morgens) ist, unabhängig vom Datum.


1
Ich bin mir nicht sicher, ob ich dies als Antwort verwenden soll, aber ich habe es hier als Kommentar angegeben: Überraschenderweise habe ich festgestellt, dass Python Vergleiche wie '23:23:00' > '23:59:00'oder akzeptiert '23:23:00' > '23:09:22', genau wie Sie es zwischen zwei datetime.datetime.now().strftime('%H:%M')Werten tun würden . Ist es der beste Weg, um einen Vergleich zwischen den Zeiten zu erreichen? Ich weiß es nicht. Funktioniert es? Soweit ich getestet habe, hat es gut funktioniert. Aber definitiv (und natürlich): keine Chance, dies mit einer Datums- / Uhrzeitzeichenfolge zu verwenden, die Monat und Wochentage hat.
ivanleoncz

Antworten:


127

Das kannst du nicht einen bestimmten Zeitpunkt (z. B. "gerade jetzt") nicht mit einem nicht festgelegten, wiederkehrenden Ereignis vergleichen (jeden Tag um 8 Uhr morgens).

Sie können überprüfen, ob jetzt vor oder nach dem heutigen 8 Uhr morgens ist:

>>> 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
Vielleicht möchten Sie die Annahme auf die Antwort von Pär Wieslander umdrehen (und sollten im Allgemeinen ein paar Minuten länger warten als Sie: P), da sie etwas spezifischer für genau das ist, was Sie gefragt haben.

65

Sie können die Verwendung time()Methode der datetimeObjekte die Tageszeit zu erhalten, die Sie für den Vergleich , ohne das Datum berücksichtigt verwenden können:

>>> 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
Achten Sie darauf , zu tun datetime.datetime.now().time(), vergessen Sie nicht die Klammern in now()!
Jose Salvatierra

10

Sie können datetime.datetime-Objekte direkt vergleichen

Z.B:

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

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"

2

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

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

Ich empfehle dies nur, wenn Sie einen unglaublich einfachen Anwendungsfall haben. Für alles, was Zeitzonen- oder Datumserkennung erfordert, sollten Sie datetime verwenden.


1

datetime haben Vergleichsmöglichkeiten

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

Sie können die Timedelta-Funktion für den Vergleich der x-Zeiterhöhung verwenden.

>>> import datetime 

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

False

Nur eine Kombination dieser Antworten dies und Roger

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.