Pythonで学ぶdatetimeモジュール入門:日付と時刻を自在に操る

プログラミングで「日付」や「時刻」を扱う機会は非常に多いものです。

Webアプリのログ記録、スケジュール管理ツール、あるいはデータ解析でタイムスタンプを操作する際など、Python標準ライブラリのdatetimeモジュールを使いこなせれば、開発の幅が大きく広がります。

本記事では、Python初心者向けにdatetimeモジュールの基本から手を動かせるサンプル、そして学んだ内容を定着させる演習問題と解答例までをわかりやすく解説します。


datetimeモジュールとは?

標準ライブラリでPythonをインストールすると自動的に利用可能なライブラリです。

外部パッケージのインストールは不要です。

datetime モジュールは日付・時刻を扱うためのモジュールです。現在の日時を取得したり、日付の計算や書式変換ができます。

年月日を扱うdate、時分秒を扱うtime、dateとtimeを組み合わせたdatetime、日付・時刻の差分を扱うtimedeltaクラスがあります。


dateクラスの基本

生成と属性アクセス

from datetime import date

d = date(2025, 5, 1)    # 2025年5月1日を生成
print(d.year, d.month, d.day)  # → 2025 5 1

今日の日付

today = date.today()

比較

d1 = date(2025, 5, 1)
d2 = date(2025, 6, 1)
print(d1 < d2)  # → True

timeクラスの基本

生成と属性

from datetime import time

t = time(14, 30, 15)  # 14:30:15
print(t.hour, t.minute, t.second)  # → 14 30 15

マイクロ秒の指定

t2 = time(14, 30, 15, 123456)
print(t2)  # → 14:30:15.123456

datetimeクラスで日付×時刻を一度に

from datetime import datetime

dt = datetime(2025, 5, 1, 14, 30, 15)
print(dt)            # → 2025-05-01 14:30:15
print(dt.date(), dt.time())  # → 2025-05-01 14:30:15

取得メソッド

  • datetime.now():ローカル現在時刻
  • datetime.utcnow():UTC現在時刻

timedeltaで差分計算

負の値を使えば過去にさかのぼれます。

秒単位、分単位、週単位も指定可能です。※td = timedelta(weeks=2, hours=3, minutes=30)

from datetime import timedelta

today = date.today()
delta = timedelta(days=7)      # 7日分
next_week = today + delta      # 1週間後
print(next_week)

文字列とのやりとり

フォーマット(strftime)

now = datetime.now()
s = now.strftime("%Y/%m/%d %H:%M:%S")
print(s)  # 例: "2025/04/29 15:45:00"
フォーマット指定子意味
%Y4桁の西暦年2025
%m2桁の月04
%d2桁の日29
%H24時間の時15
%M45
%S00

パース(strptime)

from datetime import datetime

s = "2025-05-01 08:30"
dt = datetime.strptime(s, "%Y-%m-%d %H:%M")
print(dt)  # → 2025-05-01 08:30:00

実践例:ログのタイムスタンプ抽出

import re
from datetime import datetime

log = "[2025-04-29 15:50:12] INFO: 処理開始"
m = re.match(r"\[(.+?)\]", log)
if m:
    ts = m.group(1)
    dt = datetime.strptime(ts, "%Y-%m-%d %H:%M:%S")
    print(f"ログの日時:{dt}")

まとめ

  1. date, time, datetime, timedelta の4本柱を理解しよう。
  2. strftime/strptime で文字列との変換が自在に。
  3. 差分計算や比較は timedelta&演算子でシンプルに。

演習問題

  1. 次の自分の誕生日までの日数を計算せよ
    birthday = date(2025, 12, 3) として、今日から何日あるか求める。
  2. 文字列 “2025-06-15T09:30:00” を datetime に変換して、月だけを抽出せよ
  3. 任意の日時に対し、「3時間45分後」の時刻を表示せよ
    例:2025-04-29 12:00 → 2025-04-29 15:45
  4. 現在時刻を “YYYY年MM月DD日 HH時MM分” 形式で表示せよ
  5. 日付同士の差を「○年○ヶ月○日」で表現する関数を自作せよ
    より発展。年・月をざっくり30日単位、年は12ヶ月単位とする。

解答例

from datetime import date, datetime, timedelta

# 1. 誕生日までの日数
today = date.today()
birthday = date(2025, 12, 3)
days_to_bday = (birthday - today).days
print(f"誕生日まであと{days_to_bday}日です。")

# 2. ISO形式文字列のパースと月抽出
s = "2025-06-15T09:30:00"
dt2 = datetime.strptime(s, "%Y-%m-%dT%H:%M:%S")
print(f"月は {dt2.month} 月です。")

# 3. 3時間45分後
base = datetime(2025, 4, 29, 12, 0)
delta = timedelta(hours=3, minutes=45)
future = base + delta
print(f"3時間45分後は {future} です。")

# 4. 日本語フォーマット表示
now = datetime.now()
print(now.strftime("%Y年%m月%d日 %H時%M分"))

# 5. 年月日差を計算する関数(簡易版)
def diff_ymd(d1: date, d2: date):
    delta = abs((d2 - d1).days)
    years = delta // 365
    months = (delta % 365) // 30
    days = (delta % 365) % 30
    return years, months, days

d1 = date(2023, 1, 1)
d2 = date(2025, 4, 29)
y, m, d = diff_ymd(d1, d2)
print(f"{y}年{m}ヶ月{d}日")

以上が「Pythonのdatetimeモジュール」超入門の記事と演習問題・解答例です。ぜひ手を動かして、日付・時刻操作の基礎を身につけてください!