2012-04-06 13 views
0

嗨我正在编写一个程序,它依赖于时间并观察一些奇怪的行为,但我不太清楚datetime对象。我与/时遇到麻烦,是工作中的代码...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 

我一直在与测试用例为了OT确保代码的行为方式,我想它,但它似乎没有至。

当time_delay = 0时,我发现了一个奇怪的现象,我知道现在会是> = time_arrival,因为time_changed_state是在此函数调用之前初始化的日期时间对象,现在已在函数中初始化。但是,“执行某些事情”的代码正在执行,而不是“做一些不同的代码”。

非常感谢!

+1

你确定'time_arrival'是过去吗? – 2012-04-06 09:42:41

+0

是的,我很确定它在过去。我甚至尝试使用下面的代码进行测试,在那里我刚刚初始化time_changed_state,但当它显然是错误的时候仍然评估为true。 – 2012-04-06 16:03:47

回答

1

我编辑了你的代码,这是你所期待的吗?

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

我甚至试图对时间延迟进行硬编码,它仍然打印'某些'而不是'不同的东西'......这对我来说没有任何意义。 – 2012-04-06 15:50:34

+0

当'time_changed_state'在'now'之后时,你会得到结果 – pravin 2012-04-06 16:02:09

+0

是的,这是有道理的。尽管即使现在在'time_changed_state'之后,我仍然得到奇怪的行为,因为它在上面的示例中明确设置,“now 2012-04-08 05:16:31