今川館

都内勤務の地味OLです

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  日時なのに時分秒が出力されない