Python时间比较

问题描述:

如何比较python中的时间?Python时间比较

我看到日期比较可以完成,也有“timedelta”,但我很努力地找出如何检查当前时间(来自datetime.now())是早于,晚于或等于比指定的时间(例如上午8点)不管日期如何。

无法比较特定时间点(如作为“现在”)针对未固定的,反复发生的事件(每天早上8点发生)。

您可以检查,如果现在是之前或之后今日上午8:

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

您可能想要接受PärWieslander的回答(并且通常应该再等几分钟,而不是您的:P),因为这与您提问的内容有点特殊。 – 2009-12-02 08:40:53

日期时间有比较能力

>>> import datetime 
>>> import time 
>>> a = datetime.datetime.now() 
>>> time.sleep(2.0) 
>>> b = datetime.datetime.now() 
>>> print a < b 
True 
>>> print a == b 
False 

您可以比较datetime.datetime对象直接

如:

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

可以使用datetime对象的time()方法来获得一天的时间,你可以用它进行比较,而不采取日期到:

>>> 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。你也可以做'now.time() 2009-12-02 08:42:15

+1

确保要做'datetime.datetime.now().time()',不要忘记'now()'中的方括号! – 2013-08-13 09:49:55

由罗杰·佩特的启发:

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" 

在不添加依赖关系或使用日期时间的情况下完成此操作的另一种方法是简单地对时间对象的属性进行一些计算。它有小时,分钟,秒,毫秒和时区。对于非常简单的比较,小时和分钟应该足够。

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

我不建议这样做,除非你有一个非常简单的用例。对于需要时区意识或日期意识的任何事情,您应该使用日期时间。