在我维护的一个Django网站中,我需要检查用户是否在每天特定的时间窗口登录(并执行了某项任务)。这些时间窗口是固定的,每天重复。例如,窗口1位于3 am和6:30 am之间(含),而窗口2是11:50AM和2:45PM(含)。在
每当用户返回网站时,我会检索time_now = datetime.datetime.now()
。因为我只关心时间,所以我使用time_now.time()
。接下来,我需要检查time_now.time()
是否在上述任何时间窗口内。在
我不确定如何在python中进行这种比较。特别是,如何定义控制时间窗口的时间对象?会不会是这样的:
time_now = datetime.datetime.now()
now = time_now.time()
today3am = now.replace(hour=3, minute=0, second=0, microsecond=0)
today630am = now.replace(hour=6, minute=30, second=0, microsecond=0)
if today3am < now < today630am:
#do something
(第二个时间窗口也是如此)。在
请告知这是不是正确的做法。另外,更好的方法(性能方面)也是最受欢迎的。在
我认为您不需要在当前时间中替换}。因为您已经从
hour
和{time_now
获得了time()
,所以您可以将其与另一个{a1}对象进行比较。在现在,需要上下限:
^{pr2}$一旦有了这些,就可以直接比较时间对象:
性能方面,我认为您应该将}视为常量,因为它们不会改变。所以一个更好的方法是只定义一次,而不是每次得到当前时间时都替换}。在
t_3am
和{hour
和{一些评论。在
是的,这是比较日期时间对象的正确方法。datetime docs表明datetime对象支持算术、乘法和比较运算。
我怀疑您上面提供的示例代码是否可以投入生产,但是您的
if
语句在这种情况下是独占的,不像您在问题中提到的那样包含。我也确信您知道如何将其更改为inclusive if语句,但我会为其他人包含它。在性能方面,我不确定您希望获得多大的粒度。如果您只关心记录时间,我建议您使用
datetime
模块中的time object。这将创建一个没有所有日期数据的对象,使生成的对象占用更少的RAM,可能会加快比较速度。然而,我相信这两种方法之间的差别将是微不足道的。我让你来测试一下,然后选择最能支持你目标的方法。相关问题 更多 >
编程相关推荐