datetime.datetime() / datetime.date() / datetime.time()
| 対応: | Python 2(2000) |
|---|
日時を扱うオブジェクトを生成する『datetime』モジュールの関数です。日付・時刻・日時をプログラムで操作する基本となります。
構文
from datetime import datetime, date, time # 日時オブジェクトを生成する dt = datetime(年, 月, 日, 時, 分, 秒) # 日付オブジェクトを生成する d = date(年, 月, 日) # 時刻オブジェクトを生成する t = time(時, 分, 秒) # 現在の日時を取得する now = datetime.now() # 今日の日付を取得する today = date.today()
関数一覧
| 関数 / メソッド | 概要 |
|---|---|
| datetime(年, 月, 日, 時, 分, 秒) | 指定した日時のdatetimeオブジェクトを生成します。時・分・秒は省略すると0になります。 |
| date(年, 月, 日) | 指定した日付のdateオブジェクトを生成します。 |
| time(時, 分, 秒) | 指定した時刻のtimeオブジェクトを生成します。 |
| datetime.now() | 現在のローカル日時のdatetimeオブジェクトを返します。 |
| datetime.utcnow() | 現在のUTC日時のdatetimeオブジェクトを返します。 |
| date.today() | 今日の日付のdateオブジェクトを返します。 |
| datetime.fromisoformat(文字列) | ISO 8601形式の文字列(例: 『2025-04-15T12:00:00』)からdatetimeオブジェクトを生成します。 |
サンプルコード
datetime_date.py
from datetime import datetime, date, time
# 現在の日時を取得する
now = datetime.now()
print(now) # 例: 『2025-04-15 14:30:00.123456』と出力される
# 今日の日付だけを取得する
today = date.today()
print(today) # 例: 『2025-04-15』と出力される
# 特定の日時を指定して生成する
dt = datetime(2025, 4, 15, 9, 30, 0)
print(dt) # 『2025-04-15 09:30:00』と出力される
# 日付オブジェクトを生成する
d = date(2025, 12, 31)
print(d) # 『2025-12-31』と出力される
print(d.year) # 『2025』と出力される
print(d.month) # 『12』と出力される
print(d.day) # 『31』と出力される
# 時刻オブジェクトを生成する
t = time(23, 59, 59)
print(t) # 『23:59:59』と出力される
# datetimeオブジェクトの各属性にアクセスする
dt2 = datetime.now()
print(dt2.year) # 年を取得する
print(dt2.month) # 月を取得する
print(dt2.weekday()) # 曜日を取得する(0=月曜〜6=日曜)
# ISO形式の文字列からdatetimeを生成する
dt3 = datetime.fromisoformat('2025-04-15T09:30:00')
print(dt3) # 『2025-04-15 09:30:00』と出力される
# datetimeをdateに変換する
d2 = datetime.now().date()
print(type(d2)) # 『<class 'datetime.date'>』と出力される
実行すると次のように出力されます。
python3 datetime_date.py 2025-04-15 09:30:00 2025-04-15 2025-04-15 09:30:00 2025-12-31 2025 12 31 23:59:59 2025 4 1 2025-04-15 09:30:00 <class 'datetime.date'>
よくあるミス
よくあるミス1: dateとdatetimeの混同
『date』オブジェクトは年月日のみで時刻情報を持ちません。時刻が必要な場合は『datetime』クラスを使います。
from datetime import date d = date(2025, 4, 15) print(d) # 2025-04-15(時刻なし) # d.hour # AttributeError: 'datetime.date' object has no attribute 'hour'
次のように記述します。
from datetime import datetime # 時刻が必要な場合はdatetimeを使う dt = datetime(2025, 4, 15, 9, 30, 0) print(dt) # 2025-04-15 09:30:00 print(dt.hour) # 9
よくあるミス2: 文字列をdateに変換するのにstrptimeを使わない
文字列から日付オブジェクトを作る場合は『datetime.strptime()』または『date.fromisoformat()』を使います。直接コンストラクタに文字列を渡すとTypeErrorになります。
from datetime import date
# 文字列を直接渡すとTypeError
# d = date('2025-04-15') # TypeError
次のように記述します。
from datetime import date, datetime
# fromisoformat() を使う(Python 3.7以降)
d = date.fromisoformat('2025-04-15')
print(d) # 2025-04-15
# strptime() で任意のフォーマットからパース
dt = datetime.strptime('15/04/2025', '%d/%m/%Y')
print(dt.date()) # 2025-04-15
概要
Pythonの『datetime』モジュールには複数のクラスが含まれます。『datetime.datetime』は日付と時刻の両方を持ち、『datetime.date』は日付のみ、『datetime.time』は時刻のみを持ちます。『from datetime import datetime』とインポートするとクラス名がモジュール名と同じになるため混乱することがありますが、これは慣習的な書き方です。
現在日時を取得する際、サーバーのタイムゾーン設定によって『datetime.now()』の返す時刻が変わることがあります。タイムゾーンを明示的に扱う必要がある場合は、Python 3.9以降は標準の『zoneinfo』モジュールを、それ以前は『pytz』ライブラリを使います。
日時の書式変換は『日時.strftime() / datetime.strptime()』を、期間の計算は『datetime.timedelta()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。