如何比较一天中的时间?

我发现可以进行日期比较,还有 datetime.timedelta(),但是我正在努力找出如何检查当前时间(datetime.datetime.now())是否比指定时间(例如早上8点)更早、更晚或者相同,而不管日期如何。

304223 次浏览

日期时间具有比较能力

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

你的 不行比较一个特定的时间点(比如“现在”)和一个不固定的、重复发生的事件(每天早上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

你可以使用 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

灵感来自 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"

不添加依赖项或使用 datetime 的另一种方法是简单地对 time 对象的属性进行一些计算。它有小时、分钟、秒、毫秒和时区。对于非常简单的比较,小时和分钟应该足够了。

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

我不推荐这样做,除非你有一个非常简单的用例。对于任何需要时区感知或日期感知的内容,您应该使用 datetime。

我很惊讶我没有看到这样一条线:

datetime.datetime.now().hour == 8

可以使用时间三角函数进行 x 时间增长比较。

>>> import datetime


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


False

只是这些答案的组合 这个收到