2012-04-06 9 views
0

Hallo Ich schreibe ein Programm, das von der Zeit abhängig ist und etwas merkwürdiges Verhalten mit Datetime-Objekten beobachte, die ich nicht recht herausfinden kann. Der Code arbeite ich mit/Ärger habe, ist ...Datetime-Vergleichsverhalten in Python

now = datetime.now() 
time_changed_state = some datettime object previously initialized 
time_delay = some integer 
time_arrival = time_changed_state + timedelta(minutes=time_delay) 

if now < time_arrival: 
    do something 
elif now >= time_arrival: 
    do something different 

Ich habe mit Testfällen, um arbeitet der Code ot stellen Sie sicher, die Art und Weise verhält, würde ich es mögen, aber es scheint nicht, zu.

Ich entdeckte das seltsame Verhalten, wenn die time_delay = 0, und ich weiß in der Tat, dass jetzt> = time_arrival, da time_changed_state war ein Datetime-Objekt vor diesem Funktionsaufruf initialisiert und jetzt innerhalb der Funktion initialisiert wurde. Es wird jedoch der Code "Do Something" ausgeführt und nicht der Code "Do Something Different".

Vielen Dank!

+1

Sind Sie sicher, dass 'time_arrival' in der Vergangenheit liegt? –

+0

Ja, ich bin mir ziemlich sicher, dass es in der Vergangenheit ist. Ich habe sogar versucht, mit dem unten stehenden Code zu testen, wo ich time_changed_state in der Vergangenheit initialisiere, aber immer noch auf true, wenn es eindeutig falsch sein sollte. –

Antwort

1

Ich habe Ihren Code bearbeitet, ist das, was Sie erwarten?

from datetime import datetime 
from datetime import timedelta 

now = datetime.now() 
time_changed_state = now - timedelta(hours=2) 
time_delay = 0 
time_arrival = time_changed_state + timedelta(minutes=time_delay) 

if now < time_arrival: 
    print 'something' 
elif now >= time_arrival: 
    print 'something different' 
+0

Ich habe sogar versucht, nur die Zeitverzögerung zu programmieren und es druckt immer noch "etwas" anstelle von "etwas anders" ... Was für mich keinen Sinn ergibt. –

+0

Sie erhalten dieses Ergebnis, wenn 'time_changed_state' nach 'jetzt' ist – pravin

+0

Ja, das macht Sinn. Ich bekomme das seltsame Verhalten obwohl, auch wenn jetzt nach 'time_changed_state' ist, wie es im obigen Beispiel explizit festgelegt ist, das "now