Pythonでプログラムを書いていると、「今日の日付を取得したい」「2つの日付の差を計算したい」「日付を見やすい形に整えたい」といった場面によく出くわします。こうした日付・時刻の処理をまとめて引き受けてくれるのが、標準ライブラリのdatetimeモジュールです。
この記事では、datetimeモジュールの基本的な使い方を、初心者の方にも分かりやすいように一つずつ丁寧に解説していきます。現在時刻の取得から、文字列との相互変換、日付の計算まで、実際に動くコードと実行結果を見ながら学んでいきましょう。
コンテンツ
datetimeモジュールとは?
datetimeは、日付や時刻を扱うためにPythonに標準で用意されているモジュールです。追加のインストールは不要で、importするだけですぐに使えます。よく使うのは次の4つのクラスです。
datetime:日付と時刻の両方を扱うdate:日付(年・月・日)だけを扱うtime:時刻(時・分・秒)だけを扱うtimedelta:日数や時間の「差」を扱う
名前が少しややこしいですが、「モジュール名のdatetime」の中に「クラス名のdatetime」がある、という点だけ最初に押さえておくと混乱しません。それでは実際に使っていきましょう。
現在の日付・時刻を取得する
まずは一番よく使う「今この瞬間」の取得です。日付と時刻の両方が欲しいときはdatetime.now()、日付だけで十分なときはdate.today()を使います。
from datetime import datetime, date
now = datetime.now()
print(now) # 2026-06-29 10:30:45.123456
print(now.year) # 2026
print(now.month) # 6
print(now.hour) # 10
today = date.today()
print(today) # 2026-06-29取得したdatetimeオブジェクトは、.yearや.month、.hourのように属性へアクセスするだけで、年・月・日・時・分・秒をそれぞれ取り出せます。とてもシンプルですね。
好きな日付・時刻を自分で作る
「特定の日付」を表すオブジェクトを作りたいときは、年・月・日などを直接指定します。引数は左から年、月、日、時、分、秒の順で、時刻部分を省略すると0時0分0秒になります。
from datetime import datetime, date
dt = datetime(2026, 12, 25, 18, 30, 0)
print(dt) # 2026-12-25 18:30:00
d = date(2026, 1, 1)
print(d) # 2026-01-01
print(d.weekday()) # 3 (0=月曜, 6=日曜なので木曜日)weekday()メソッドを使うと曜日を数字で取得できます。月曜日が0、日曜日が6です。「その日が何曜日か」を判定したいときに便利なので覚えておきましょう。
日付を見やすい文字列に変換する(strftime)
datetimeオブジェクトをそのままprintすると「2026-06-29 10:30:45.123456」のような形式になります。これを「2026年6月29日」のように好きな形へ整えるのがstrftime()メソッドです。書式コード(%Yなど)を組み合わせて指定します。
from datetime import datetime
now = datetime(2026, 6, 29, 9, 5, 30)
print(now.strftime('%Y/%m/%d')) # 2026/06/29
print(now.strftime('%Y年%m月%d日')) # 2026年06月29日
print(now.strftime('%H:%M:%S')) # 09:05:30
print(now.strftime('%Y-%m-%d %H:%M')) # 2026-06-29 09:05よく使う書式コードを下にまとめました。
%Y:西暦4桁(例: 2026)%m:月の2桁(例: 06)%d:日の2桁(例: 29)%H:24時間表記の時(例: 09)%M:分(例: 05)%S:秒(例: 30)
なお、同じ書式指定はf文字列の中でも使えます。f'{now:%Y/%m/%d}'のように書くと、よりすっきりとした記述になります。f文字列そのものの使い方は【Python】f文字列(f-string)の使い方を初心者向けに徹底解説!で詳しく紹介していますので、あわせて読んでみてください。
文字列を日付に変換する(strptime)
逆に、「2026-06-29」のような文字列をdatetimeオブジェクトに変換したいこともあります。たとえばCSVファイルやフォームから受け取った日付は最初は文字列です。これを変換するのがstrptime()です。元の文字列がどんな形式かを書式コードで教えてあげるのがポイントです。
from datetime import datetime
text = '2026-06-29 09:05:30'
dt = datetime.strptime(text, '%Y-%m-%d %H:%M:%S')
print(dt) # 2026-06-29 09:05:30
print(dt.month) # 6
print(type(dt)) # <class 'datetime.datetime'>文字列のままでは日付の計算ができませんが、strptime()でdatetimeに変換しておけば、このあと紹介する日付の足し算・引き算ができるようになります。strftime(出力用)とstrptime(入力用)は名前が似ているので、「p = parse(読み取り)」と覚えると区別しやすいですよ。
日付の差・加算・減算(timedelta)
「3日後の日付は?」「2つの日付は何日離れている?」といった計算にはtimedeltaを使います。datetime同士を引き算するとtimedeltaが返り、.daysで日数を取り出せます。
from datetime import datetime, timedelta
now = datetime(2026, 6, 29)
print(now + timedelta(days=7)) # 2026-07-06 00:00:00
print(now - timedelta(days=30)) # 2026-05-30 00:00:00
start = datetime(2026, 1, 1)
end = datetime(2026, 6, 29)
diff = end - start
print(diff.days) # 179timedeltaにはdaysのほかhoursやminutes、weeksも指定できます。たとえばtimedelta(weeks=2)で2週間後を求められます。日付を1日ずつずらしながら処理したいときは、for文・range関数と組み合わせると便利です。繰り返し処理に不安がある方はPythonのfor文・range関数を攻略!これを知れば基本的な処理ができる使い方9選!を先に読んでおくとスムーズです。
また、計算した日付を一覧として持っておきたい場合は、結果をリストにためていくと扱いやすくなります。リストへの追加方法はPythonでリストに要素を追加する方法【append, extend, insert】(スライス)で解説していますので参考にしてください。
もっと効率的にPythonを学びたい人へ
ここまでdatetimeの使い方を見てきましたが、「独学だとつまずいたときに質問できる相手がいない」「実務で使えるレベルまで体系的に学びたい」と感じる方も多いのではないでしょうか。そんなときは、マンツーマン指導が受けられるプログラミングスクールを活用するのも一つの手です。未経験からのPython習得や転職サポートに対応したスクールも多く、まずは無料カウンセリングで学習プランを相談してみると、自分に合った進め方が見えてきます。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonのdatetimeモジュールを使った日付・時刻の扱い方を解説しました。最後に要点を振り返っておきましょう。
- 現在の日時は
datetime.now()、今日の日付はdate.today()で取得できる - 年・月・日などは
.yearのような属性で取り出せる strftime()で日付を好きな文字列の書式に変換できるstrptime()で文字列をdatetimeに変換できる(p=parseと覚える)timedeltaで日付の加算・減算や差の計算ができる
datetimeは、ログの記録や期限の計算、データ集計など実務でも頻繁に登場する重要なモジュールです。まずは現在時刻の取得とstrftimeでの書式変換から、ぜひ手を動かして試してみてくださいね。
ナノトイラボ 