64

変数があり、それが日時オブジェクトかどうかを知る必要があります。

これまでのところ、関数で次のハックを使用して日時オブジェクトを検出してきました。

if 'datetime.datetime' in str(type(variable)):
     print('yes')

しかし、実際には、何かがどのタイプのオブジェクトであるかを検出する方法が必要です。私ができるように:

if type(variable) is str: print 'yes'

オブジェクト型の名前を文字列に変換し、文字列に含まれているかどうかを確認するハック以外にこれを行う方法はあります'datetime.datetime'か?

4

8 に答える 8

6

オブジェクトはタイプであると見なされますが、オブジェクトはタイプでdatetime.dateあると見なされることに注意してください。datetime.datetimedatetime.datetimedatetime.date

import datetime                                                                                                                     

today = datetime.date.today()                                                                                                       
now = datetime.datetime.now()                                                                                                       

isinstance(today, datetime.datetime)                                                                                                
>>> False

isinstance(now, datetime.datetime)                                                                                                  
>>> True

isinstance(now, datetime.date)                                                                                                      
>>> True

isinstance(now, datetime.datetime)                                                                                                  
>>> True
于 2018-11-24T01:02:01.250 に答える
4

上記の答えはすべて、日付がdatetime.datetime型の場合にのみ機能すると思います。日付オブジェクトの型が datetime.time または datetime.date の場合はどうなりますか?

これは、日時オブジェクトを見つける方法です。それはいつも私のために働いた。(Python2 & Python3):

import datetime
type(date_obj) in (datetime, datetime.date, datetime.datetime, datetime.time)

Python2 または Python3 シェルでのテスト:

import datetime
d = datetime.datetime.now()  # creating a datetime.datetime object.
date = d.date()  # type(date): datetime.date
time = d.time()  # type(time): datetime.time

type(d) in (datetime, datetime.date, datetime.datetime, datetime.time)
True
type(date) in (datetime, datetime.date, datetime.datetime, datetime.time)
True
type(time) in (datetime, datetime.date, datetime.datetime, datetime.time)
True
于 2017-12-05T15:07:26.337 に答える
3

isinstanceあなたの友達です

>>> thing = "foo"
>>> isinstance(thing, str)
True
于 2013-06-07T19:55:58.267 に答える
2

isinstance を使用すると、必要なことが行われますが、許可よりも許しを求めるほうがよいという意味で、あまり「pythonic」ではありません。

try:
    do_something_small_with_object() #Part of the code that may raise an 
                                     #exception if its the wrong object
except StandardError:
    handle_case()

else:
    do_everything_else()
于 2013-06-07T20:15:34.720 に答える