代码之家  ›  专栏  ›  技术社区  ›  Jacek Sierajewski

为什么我不能在代码中确定对象是数据时间类型?

  •  1
  • Jacek Sierajewski  · 技术社区  · 6 年前

    我有一个变量v,当我这样做的时候

    print type(v)
    

    我确实明白

    <type 'DateTime'>
    

    但当我这样做的时候

    if type(v) in (datetime, datetime.date, datetime.datetime, datetime.time):
    

    这不是真的

    问题是:为什么?

    编辑:

    类型datetime是特定于spotfire的类型。

    https://docs.tibco.com/pub/doc_remote/spotfire/7.9.0/TIB_sfire-analyst_7.9.0_api/html/F_Spotfire_Dxp_Data_DataType_DateTime.htm

    2 回复  |  直到 6 年前
        1
  •  0
  •   foobarna    6 年前

    在这种情况下,您希望使用的是 isinstance

    if isinstance(v, (datetime, datetime.date, datetime.datetime, datetime.time)):
    

    简而言之,原因是 type(v) 更严格,不能使用子类,就像我想象的那样。

    详细概述 type vs isinstance 前往 this question .

    也, 请注意,您的类型是 <type 'DateTime'> 而不是 datetime.datetime . 你需要导入那个 DateTime 类并使用它。如:

    from x.y.z import DateTime
    
    if type(v) in (..., DateTime, ...):
        ....
    
        2
  •  1
  •   Benyamin Jafari    6 年前

    我测试过这个条件 True .

    import datetime
    
    
    v = datetime.datetime.now()  # maybe your problem is here.
    print(type(v))
    
    if type(v) in (datetime, datetime.date, datetime.datetime, datetime.time):
        print("I'm True")
    
    else:
        print("I'm False")
    

    出:

    <type 'datetime.datetime'>
    "I'm True"