Pythonのdate, datetimeをisinstanceで調べるとき
Pythonのdatetimeをisinstanceで調べると、date, datetimeの両方にTrueを返すので注意。
>>> from datetime import date, datetime >>> today, now = date.today(), datetime.now() >>> isinstance(today, date) True >>> isinstance(today, datetime) False >>> isinstance(now, datetime) True >>> isinstance(now, date) True
だから、以下のようなプログラムを書いて動かすと期待通りの動きをしない。
# -*- coding:utf-8 -*- from datetime import date, datetime def dateformat(x): if isinstance(x, date): return x.strftime('%Y/%m/%d') if isinstance(x, datetime): return x.strftime('%Y/%m/%d %H:%M:%S') return x if __name__ == '__main__': print(dateformat(date.today())) # => 2015/04/23 日付なのでY/m/d形式で良い print(dateformat(datetime.now())) # => 2015/04/23 日時なのに時分秒が出力されない