【问题标题】:How to compare timedelta object with time object in python如何在python中比较timedelta对象和时间对象
【发布时间】:2022-01-11 07:51:05
【问题描述】:

我有一个时间对象,我使用 timedelta 增加了 5 小时 30 分钟,现在我有一个 timedelta 对象

new_time2 = timedelta(hours=starttime_time.hour+5, minutes=starttime_time.minute+30)
print(new_time2, type(new_time2))
>>>15:30:00 <class 'datetime.timedelta'>

现在我有另一个时间对象

input_time = "09:30:00"
a = datetime.strptime(input_time, '%H:%M:%S').time()
print(a, type(a))
>>>09:30:00 <class 'datetime.time'>

所以我想比较这两次,但是当我这样做时,我得到了一个 TypeError

print(new_time2 >= a)

TypeError: '>=' not supported between instances of 'datetime.timedelta' and 'datetime.time'
09:30:00 <class 'datetime.time'>

那么有没有其他方法可以比较这两次。 提前致谢。

【问题讨论】:

  • 您是否要在 starttime_time 中添加 5 小时 30 分钟?

标签: python datetime comparison python-datetime timedelta


【解决方案1】:

您可以将time 实例转换为timedelta

>>> from datetime import timedelta
>>> e = timedelta(hours=a.hour, minutes=a.minute, seconds=a.second)
>>> print(e, type(e))
9:30:00 <class 'datetime.timedelta'>

然后你可以比较:

>>> print(new_time2 >= e)
True

【讨论】:

    【解决方案2】:

    你创建了一个 timedelta 对象,而不是一个 datetime 对象。让我举个例子:

    >>> from datetime import datetime, timedelta
    >>>
    >>> t1 = datetime.now()
    >>> t1
    datetime.datetime(2022, 1, 11, 13, 34, 37, 537863)
    >>>
    >>> tenMinsDelta = timedelta(minutes=10)
    >>>
    >>> t1PlusTen = t1 + tenMinsDelta
    >>>
    >>>
    >>> type(t1PlusTen)
    <class 'datetime.datetime'>
    >>>
    >>> type(tenMinsDelta)
    <class 'datetime.timedelta'>
    

    所以,不要这样做:

    new_time2 = timedelta(hours=starttime_time.hour+5, minutes=starttime_time.minute+30)
    
    

    你必须:

    delta = timedelta(hours=5, minutes=30)
    
    new_time = starttime_time + delta
    
    

    【讨论】:

      【解决方案3】:

      我用这个函数给时间对象加一分钟:

      def addMinute(timeObject):
          # Python doesn't allow a time object to use timedelta
          # This function takes a time object converts it into a datetime object, adds 1 minute and returns a time object
          est_now_dt = datetime.now(est)
          #newDt = est_now_dt.replace(hour = timeObject.hour, minute = timeObject.minute, second = 0, microsecond = 0).time()
          newDt = est_now_dt.replace(hour = timeObject.hour, minute = timeObject.minute, second = 0, microsecond = 0)
          newDt = newDt + timedelta(minutes =1)
          newDt = newDt.time()
          return newDt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多