【Python】datetimeモジュールで日付・時刻を扱う

Python

こんにちは、かつコーチです。

「今日の日付を取得したい」「日付の文字列を、扱いやすい形式に変換したい」

そんなとき、Pythonでは標準ライブラリのdatetimeモジュールを使います。

datetime.now()date.today()は何が違うの」

「文字列と日付を相互に変換する方法が分からない」

そう感じている方も多いと思います。

この記事では、datetime.now()の基本、strftimestrptimeによるフォーマット変換、そしてtimedeltaを使った日付計算までを解説します。

読み終える頃には、日付・時刻を扱う処理を、自信を持って書けるようになります。

datetime.now()の基本

現在の日時を取得する

datetimeモジュールのdatetimeクラスにあるnow()メソッドを使うと、現在の日時を取得できます。

from datetime import datetime

now = datetime.now()
print(now)
print(type(now))

実行結果は次のようになります(実行した日時によって値は変わります)。

2026-08-22 14:35:10.123456
<class 'datetime.datetime'>

now()の返り値は、datetimeという専用の型のオブジェクトです。

単なる文字列ではなく、年・月・日・時・分・秒などの情報を、それぞれ属性として持っています。

from datetime import datetime

now = datetime.now()

print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)

実行結果は次のようになります。

2026
8
22
14
35

date.todayとの違い

日付だけが必要で、時刻の情報が不要な場合は、dateクラスのtoday()メソッドを使います。

from datetime import date, datetime

today = date.today()
now = datetime.now()

print(today)
print(now)

実行結果は次のようになります。

2026-08-22
2026-08-22 14:35:10.123456

date.today()は日付のみ、datetime.now()は日付と時刻の両方を持つ点が違いです。

「今日の日付だけ記録したい」場合はdate、「処理が実行された正確な時刻まで記録したい」場合はdatetime、というように使い分けます。

strftime・strptimeでのフォーマット変換

strftimeで日付をお好みの文字列に変換する

strftimeは、datetimeオブジェクトを、指定したフォーマットの文字列に変換するメソッドです。

from datetime import datetime

now = datetime.now()

formatted = now.strftime("%Y年%m月%d日 %H時%M分")
print(formatted)

実行結果は次のようになります。

2026年08月22日 14時35分

主なフォーマット指定子は次の通りです。

指定子意味
%Y4桁の年2026
%m2桁の月08
%d2桁の日22
%H24時間表記の時14
%M35
%S10
%A曜日(英語フル)Saturday

画面表示用に見やすい形式へ整えたいときは、このstrftimeをよく使います。

strptimeで文字列を日付に変換する

strptimeは、strftimeとは逆に、文字列をdatetimeオブジェクトに変換するメソッドです。

from datetime import datetime

date_string = "2026-08-22 14:35:00"

parsed = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(parsed)
print(type(parsed))

実行結果は次のようになります。

2026-08-22 14:35:00
<class 'datetime.datetime'>

strptimeの第2引数には、変換対象の文字列の形式に合わせたフォーマットを指定します。

CSVファイルやAPIのレスポンスなど、文字列として届いた日付データを、Pythonで扱いやすいdatetimeオブジェクトに変換する場面でよく使います。

timedeltaでの日付計算

timedeltaで日数・時間を加減算する

timedeltaは、日付や時刻の「差分」や「経過期間」を表すクラスです。

datetimeオブジェクトにtimedeltaを足し引きすることで、日付の計算ができます。

from datetime import datetime, timedelta

today = datetime.now()

three_days_later = today + timedelta(days=3)
one_week_ago = today - timedelta(weeks=1)

print(f"3日後: {three_days_later.strftime('%Y-%m-%d')}")
print(f"1週間前: {one_week_ago.strftime('%Y-%m-%d')}")

実行結果は次のようになります。

3日後: 2026-08-25
1週間前: 2026-08-15

timedeltaにはdaysweekshoursminutessecondsなど、さまざまな単位を指定できます。

「支払い期限は7日後」「セッションの有効期限は30分後」といった、日付・時刻の計算を伴う処理で頻繁に使います。

2つの日付の差を求める

datetimeオブジェクト同士を引き算すると、timedeltaオブジェクトが得られます。

from datetime import datetime

start = datetime(2026, 1, 1)
end = datetime(2026, 8, 22)

diff = end - start

print(diff)
print(f"経過日数: {diff.days}日")

実行結果は次の通りです。

233 days, 0:00:00
経過日数: 233日

diff.daysのように、timedeltaオブジェクトから日数だけを取り出すこともできます。

会員登録日からの経過日数や、締切までの残り日数を計算するときに役立ちます。

よくあるつまずきポイント・エラー対処

strptimeでフォーマットが一致せずエラーになる

筆者がCSVから読み込んだ日付データを変換する処理を書いていたとき、フォーマット指定を1文字間違えてエラーに遭遇した経験があります。

❌ Before(フォーマットが実際の文字列と一致していない書き方)

from datetime import datetime

date_string = "2026/08/22"

parsed = datetime.strptime(date_string, "%Y-%m-%d")
print(parsed)

実行すると、次のエラーメッセージが表示されます。

ValueError: time data '2026/08/22' does not match format '%Y-%m-%d'

実際の文字列は/区切りの2026/08/22なのに、フォーマット指定では-区切りの%Y-%m-%dを指定してしまっているのが原因です。

strptimeは、指定したフォーマットと、実際の文字列の区切り文字や桁数が完全に一致していないと、エラーになります。

✅ After(実際の文字列に合わせたフォーマットの書き方)

from datetime import datetime

date_string = "2026/08/22"

parsed = datetime.strptime(date_string, "%Y/%m/%d")
print(parsed)

実行結果は次の通りです。

2026-08-22 00:00:00

フォーマット指定を、実際のデータの区切り文字(/)に合わせたことで、正しく変換できるようになりました。

外部から受け取る日付データをstrptimeで変換する際は、まず変換対象の文字列をprintなどで確認し、区切り文字や桁数を正確に把握してからフォーマットを指定するのが安全です。

まとめ

この記事のポイント

  • datetime.now()で日付と時刻、date.today()で日付のみを取得できる
  • strftimeは日付を文字列に、strptimeは文字列を日付に変換するメソッドである
  • timedeltaを使うと、日付の加減算や2つの日付の差分を計算できる
  • strptimeはフォーマット指定と実際の文字列の形式が完全に一致していないとエラーになる
  • 外部データを変換する際は、まず元の文字列の形式を確認してからフォーマットを指定する

次に読むべき記事

  • 文字列操作とf-stringの書き方
  • 条件分岐(if文)の基本
  • collections.Counterでデータを集計する

タグ: Python, 初心者向け, 標準ライブラリ

タイトルとURLをコピーしました