【问题标题】:How to make sure object instances are of the same type (datetime.time) so they can be compared?如何确保对象实例属于同一类型(datetime.time)以便可以比较它们?
【发布时间】:2020-11-05 15:01:26
【问题描述】:

我正在尝试比较两个 datetime.time,但我不断收到错误消息:

"An exception of type TypeError occurred. Arguments: ("'<=' not supported between instances of 'datetime.datetime' and 'datetime.time'",)"

我检查了所有类型,在我进行转换后它们似乎都是datetime.time 类型(请参阅打印语句),但终端仍然发出同样的错误

print(appointment_start, type(appointment_start)) # 04:56:00 type <class 'datetime.time'>
print(appointment_end, type(appointment_end)) # <class 'datetime.time'>
print(time, type(time)) # <class 'datetime.datetime'>
formatted_time = time.time() # trying to convert to datetime.time
print(formatted_time, type(formatted_time)) # 09:00:00 <class 'datetime.time'>

if formatted_time >= appointment_start and time <= appointment_end:
            print('unavailable')
            return True

我读过SO answers that point out nothing is wrong with using &gt;=。我什至尝试只使用&gt;,但仍然出现同样的问题。

【问题讨论】:

  • 回溯似乎表明您有一个 datetime 和一个 time - 而不是两个 time
  • 是的。请查看打印声明 - 他们另有说明
  • 您的代码从字面上告诉您time 是一个datetime 对象,而您将它与appointment_end 进行比较,这是一个time 对象。
  • 你为什么要把timeappointment_end比较?
  • @Chris 是的。漫漫长夜。应该听从鲍勃叔叔的建议,累了就不要写代码了。

标签: python datetime


【解决方案1】:

解决方案

比较datetime.datetime 对象的time 部分和datetime.time 对象。换句话说,您需要一个 apples-to-apples 比较。

import datetime

## Define datetime.datetime object
# dttm = datetime.datetime.now() # a datetime timestamp
dttm = datetime.datetime(2020, 11, 4, 22, 2, 7, 879029)
print(dttm)
print(repr(dttm))

# 2020-11-04 22:02:07.879029
# datetime.datetime(2020, 11, 4, 22, 2, 7, 879029)

## Define datetime.time object
tm = datetime.time(hour=10, minute=30, second=15, microsecond=0)
print(tm)
print(repr(tm))

# 10:30:15
# datetime.time(10, 30, 15)

## Compare
dttm.time() > tm

# True

【讨论】:

    【解决方案2】:

    从更一般的角度来看:您可以创建一个assertion

    import datetime
    
    a, b = datetime.time(1,2,3), datetime.datetime(2020,4,5)
    assert all(isinstance(i, datetime.time) for i in (a, b)), "all instances must be of type datetime.time!"
    # AssertionError: all instances must be of type datetime.time!
    
    a, b = datetime.time(1,2,3), datetime.time(4,5,6)
    assert all(isinstance(i, datetime.time) for i in (a, b)), "all instances must be of type datetime.time!"
    # (no error)
    

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 2015-03-09
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      相关资源
      最近更新 更多