【问题标题】:How to compare times of the day?如何在 Python 中比较时间?
【发布时间】:2010-12-22 07:56:39
【问题描述】:

我看到可以进行日期比较,还有 datetime.timedelta(),但我正在努力找出如何检查当前时间 (datetime.datetime.now()) 是否早于、晚于或相同于指定时间 (例如上午 8 点),无论日期如何。

【问题讨论】:

  • 我不确定是否将其作为答案,但我将其作为评论放在此处:令人惊讶的是,我发现 Python 接受像 '23:23:00' > '23:59:00''23:23:00' > '23:09:22' 这样的比较,就像你会做的那样在两个 datetime.datetime.now().strftime('%H:%M') 值之间。这是实现时间比较的最佳方式吗?我不知道。它有效吗?据我测试,它运行良好。但绝对(当然):不可能将它与具有月份、工作日的日期时间字符串一起使用。

标签: python


【解决方案1】:

datetime 有比较能力

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

【讨论】:

    【解决方案2】:

    可以直接比较 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
    >>> 
    

    【讨论】:

      【解决方案3】:

      无法将特定时间点(例如“现在”)与不固定的重复事件(每天早上 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
      

      【讨论】:

      • 您可能希望将接受转为 Pär Wieslander 的回答(通常应该比您多等几分钟 :P),因为它更具体地反映了您的要求。
      • 我也不确定这个答案的前提是否正确。 Datetime 具有内置函数,可将特定时间点减少为每日重复数字。
      【解决方案4】:

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

      【讨论】:

      • 一定要datetime.datetime.now().time(),别忘了now()中的括号!
      【解决方案5】:

      灵感来自罗杰·佩特:

      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"
      

      【讨论】:

        【解决方案6】:

        在不添加依赖项或使用日期时间的情况下执行此操作的另一种方法是简单地对时间对象的属性进行一些数学运算。它有小时、分钟、秒、毫秒和时区。对于非常简单的比较,小时和分钟就足够了。

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

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

        【讨论】:

          【解决方案7】:

          很惊讶我在这里没有看到这个班轮:

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

          【讨论】:

            【解决方案8】:

            您可以使用 Timedelta 函数进行 x 时间增加比较。

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

            只是thisRoger这些答案的组合

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-10-01
              • 2016-06-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-23
              相关资源
              最近更新 更多