python中的时间比较

2024-09-30 06:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在我维护的一个Django网站中,我需要检查用户是否在每天特定的时间窗口登录(并执行了某项任务)。这些时间窗口是固定的,每天重复。例如,窗口1位于3 am6:30 am之间(含),而窗口2是11:50AM2: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

(第二个时间窗口也是如此)。在

请告知这是不是正确的做法。另外,更好的方法(性能方面)也是最受欢迎的。在


Tags: djangodatetimetime网站检查用户时间amnow
2条回答

我认为您不需要在当前时间中替换hour和{}。因为您已经从time_now获得了time(),所以您可以将其与另一个{a1}对象进行比较。在

dt_now = datetime.datetime.now()
t_now = dt_now.time()

现在,需要上下限:

^{pr2}$

一旦有了这些,就可以直接比较时间对象:

if t_3am < t_now <= t_630am: # used <= to make the upper bound inclusive
    # do something

性能方面,我认为您应该将t_3am和{}视为常量,因为它们不会改变。所以一个更好的方法是只定义一次,而不是每次得到当前时间时都替换hour和{}。在

一些评论。在

  1. 是的,这是比较日期时间对象的正确方法。datetime docs表明datetime对象支持算术、乘法和比较运算。

  2. 我怀疑您上面提供的示例代码是否可以投入生产,但是您的if语句在这种情况下是独占的,不像您在问题中提到的那样包含。我也确信您知道如何将其更改为inclusive if语句,但我会为其他人包含它。在

    if today3am <= now <= today630am:
        ## This is true if now is
        ## 03:00 or 03:01
    
  3. 性能方面,我不确定您希望获得多大的粒度。如果您只关心记录时间,我建议您使用datetime模块中的time object。这将创建一个没有所有日期数据的对象,使生成的对象占用更少的RAM,可能会加快比较速度。然而,我相信这两种方法之间的差别将是微不足道的。我让你来测试一下,然后选择最能支持你目标的方法。

相关问题 更多 >

    热门问题