Python - datetime型から日付のみ取り出す

date()メソッドで date型に変換する方法、yearプロパティ・monthプロパティ・dayプロパティを使用する方法、フォーマットを指定して文字列にする方法を解説します。

datetime型からdate型のオブジェクトを作成する

datetime の date メソッドを使用すると date型 の値を返します。元の値は変更されず、新しいオブジェクトを返します。
date型の値 = datetimeオブジェクト.date()

次のサンプルコードは 日時を指定して datetime型 の値を生成し、date型 にしています。

import datetime

# 日時を指定してdatetime型のインスタンス生成
datetimeValue = datetime.datetime(2099, 1, 31, 23, 59, 1)

# 結果 = 2099-01-31 23:59:01
print(f'  datetimeValue(datetime型) -> {datetimeValue}')

# datetime型からdate型のインスタンス生成
dateValue = datetimeValue.date()

# 結果 = 2099-01-31
print(f'  dateValue(date型) -> {dateValue}')
サンプルコードの実行結果
サンプルコードの実行結果

年・月・日を数値で個別に取得する

yearプロパティ、monthプロパティ、dayプロパティ を使用すると、年・月・日を数値型で返します。
年(1~9999) = datetimeオブジェクト.year
月(1~12)   = datetimeオブジェクト.month
日(1~31)   = datetimeオブジェクト.day

次のサンプルコードは 日時を指定して datetime型 の値を生成し、年・月・日を表示します。

import datetime

# 日時を指定してdatetime型のインスタンス生成
datetimeValue = datetime.datetime(2099, 1, 31, 23, 59, 1)

# 結果 = 2099-01-31 23:59:01
print(f'  datetimeValue       -> {datetimeValue}')

# 年(結果 = 2099)
print(f'  datetimeValue.year  -> {datetimeValue.year}')

# 月(結果 = 1)
print(f'  datetimeValue.month -> {datetimeValue.month}')

# 日(結果 = 31)
print(f'  datetimeValue.day   -> {datetimeValue.day}')
サンプルコードの実行結果
サンプルコードの実行結果

フォーマットを指定して文字列にする

strftime メソッドの引数にフォーマットを指定すると、フォーマット通りの文字列を返します。
フォーマットされた文字列 = datetimeオブジェクト.strftime(フォーマット)

次のコードは strftimeメソッド を使用し、フォーマットされた日付を表示します。

import datetime

# 日時を指定してdatetime型のインスタンス生成
datetimeValue = datetime.datetime(2099, 1, 2, 23, 59, 1)

# 結果 = 2099年01月02日
print(datetimeValue.strftime('%Y年%m月%d日'))

# 結果 = 2099/01/02
print(datetimeValue.strftime('%Y/%m/%d'))

# 結果 = 990102
print(datetimeValue.strftime('%y%m%d'))
フォーマットで使用できる文字
ディレクティブ 意味
%d 日にち 01, 02, ..., 31
%m 01, 02, ..., 12
%y 2桁の西暦 00, 01, ..., 99
%Y 4桁の西暦 0001, 0002, ..., 9999
%H 0埋めした2桁の時 (24時間表記) 00, 01, ..., 23
%I 0埋めした2桁の時 (12時間表記) 01, 02, ..., 12
%M 0埋めした2桁の分 00, 01, ..., 59
%S 0埋めした2桁の秒 00, 01, ..., 59
%f 0埋めした6桁のマイクロ秒 000000, 000001, ..., 999999
%% 文字 '%' %
次のフォーマットはロケール設定で値が変わります
ディレクティブ 意味
%b 月名の短縮形 Jan, Feb, ..., Dec(en_USの場合)
%B 月名 January, February, ..., December(en_USの場合)
%p AM,またはPM AM, PM(en_USの場合)
その他の書式はPython公式ドキュメントを参照してください。
サンプルコードの実行結果
サンプルコードの実行結果

参考資料

検証環境