基礎から学ぶPython入門 90日コース | 業務自動化 - Day 41:日時処理

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 41:日時処理で「時間を味方につける」スキルを身につける

Day 41では、業務自動化で頻出の 日時処理 を扱います。 「締め切りまであと何日?」「この期間の売上を集計したい」「ログの日時を見やすく整形したい」など、 日付・時刻を正しく扱えるかどうかで、できることの幅が大きく変わります。

キーワードは次の5つです。

  • datetime
  • timedelta
  • 日付計算
  • 期間計算
  • フォーマット

ここでは、初心者向けにかみ砕いて、 「現在日時の取得 → 日付計算 → 期間計算 → 表示フォーマット」までを ステップバイステップで説明していきます。

datetimeの基本:現在日時を扱ってみる

現在日時を取得する

# day41_datetime_basic.py
from datetime import datetime


def show_now():
    """現在日時を取得して表示する例です。"""
    # 現在の日時を取得します。
    now = datetime.now()

    print("=== 現在日時 ===")
    print(now)  # そのまま表示すると「2026-08-31 16:45:00.123456」のような形式になります。

    # 年・月・日・時・分・秒を個別に取り出すこともできます。
    print("年:", now.year)
    print("月:", now.month)
    print("日:", now.day)
    print("時:", now.hour)
    print("分:", now.minute)
    print("秒:", now.second)


if __name__ == "__main__":
    show_now()
Python

ポイント:

  • datetime.now() で「今この瞬間」の日時オブジェクトを取得できます。
  • year, month, day などの属性で、各要素を取り出せます。

特定の日付・時刻を作る:datetimeオブジェクトの生成

例:2024年1月1日 9時00分の日時を作る

from datetime import datetime


def create_specific_datetime():
    """特定の日付・時刻のdatetimeオブジェクトを作る例です。"""
    dt = datetime(2024, 1, 1, 9, 0, 0)  # 年, 月, 日, 時, 分, 秒

    print("=== 特定日時 ===")
    print(dt)
    print("年:", dt.year, "月:", dt.month, "日:", dt.day)
    print("時:", dt.hour, "分:", dt.minute, "秒:", dt.second)


if __name__ == "__main__":
    create_specific_datetime()
Python

ポイント:

  • datetime(年, 月, 日, 時, 分, 秒) で任意の日時を作れます。
  • 「締め切り日時」「イベント開始日時」などをコードで表現するときに使います。

timedeltaの基本:日付・時間の差を表す

timedeltaとは何か

timedelta は、「時間の差」や「期間」を表すオブジェクトです。

  • 「3日後」
  • 「2時間前」
  • 「30分後」

といった「時間のずれ」を表現するのに使います。

例:3日後の日時を計算する

from datetime import datetime, timedelta


def three_days_later():
    """現在から3日後の日時を計算する例です。"""
    now = datetime.now()
    delta = timedelta(days=3)  # 3日分の差を表すオブジェクトです。

    future = now + delta  # 現在日時に3日分を足します。

    print("=== 現在日時 ===")
    print(now)
    print("=== 3日後の日時 ===")
    print(future)


if __name__ == "__main__":
    three_days_later()
Python

ポイント:

  • timedelta(days=3) で「3日」という期間を表現。
  • now + delta で「3日後」、now - delta で「3日前」を計算できます。

日付計算:締め切りや有効期限を計算する

例:締め切り日を計算する(今日から7日後)

from datetime import datetime, timedelta


def calculate_deadline(days=7):
    """今日から指定日数後の締め切り日を計算する例です。"""
    today = datetime.now().date()  # 日付部分だけを取得します。
    delta = timedelta(days=days)

    deadline = today + delta

    print("=== 今日の日付 ===")
    print(today)
    print(f"=== 締め切り日({days}日後) ===")
    print(deadline)


if __name__ == "__main__":
    calculate_deadline(7)
Python

ここでのポイント:

  • datetime.now().date() で「日付だけ」の date オブジェクトを取得。
  • date に対しても timedelta を足し引きできます。
  • 「今日から何日後が締め切りか」を簡単に計算できます。

期間計算:2つの日付の差を求める

例:開始日と終了日の間が何日かを計算する

from datetime import date


def calculate_period():
    """開始日と終了日の期間(日数)を計算する例です。"""
    start = date(2024, 1, 1)
    end = date(2024, 1, 15)

    # 日付同士の引き算で timedelta が得られます。
    delta = end - start

    print("=== 開始日 ===")
    print(start)
    print("=== 終了日 ===")
    print(end)
    print("=== 期間(日数) ===")
    print(delta.days, "日")


if __name__ == "__main__":
    calculate_period()
Python

ポイント:

  • end - starttimedelta が得られる。
  • delta.days で「何日分の差か」を取得できる。
  • 「キャンペーン期間」「プロジェクト期間」などを計算するときに便利です。

フォーマット:日時を文字列として整形する

strftimeで「表示用の文字列」に変換する

strftime は、日時を 指定した形式の文字列 に変換するためのメソッドです。

よく使うフォーマット指定子:

  • %Y:西暦(4桁)
  • %m:月(2桁)
  • %d:日(2桁)
  • %H:時(24時間表記)
  • %M:分
  • %S:秒

例:日本語っぽい形式に整形する

from datetime import datetime


def format_datetime():
    """日時を日本語っぽい形式の文字列に整形する例です。"""
    now = datetime.now()

    # 「YYYY-MM-DD HH:MM:SS」形式
    s1 = now.strftime("%Y-%m-%d %H:%M:%S")

    # 「YYYY年MM月DD日 HH時MM分」形式
    s2 = now.strftime("%Y年%m月%d日 %H時%M分")

    print("=== デフォルト表示 ===")
    print(now)
    print("=== フォーマット1 ===")
    print(s1)
    print("=== フォーマット2 ===")
    print(s2)


if __name__ == "__main__":
    format_datetime()
Python

ポイント:

  • strftime("フォーマット文字列") で日時を好きな形の文字列にできる。
  • ログ出力やレポートの見出しなど、「人間が読むための日時表示」に必須です。

文字列から日時に変換する:strptime

例:「2024-01-01 09:00:00」という文字列をdatetimeにする

from datetime import datetime


def parse_datetime():
    """文字列からdatetimeオブジェクトを作る例です。"""
    s = "2024-01-01 09:00:00"

    # 文字列の形式に合わせてフォーマットを指定します。
    dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")

    print("=== 元の文字列 ===")
    print(s)
    print("=== 変換後のdatetime ===")
    print(dt)
    print("年:", dt.year, "月:", dt.month, "日:", dt.day)


if __name__ == "__main__":
    parse_datetime()
Python

ポイント:

  • datetime.strptime(文字列, フォーマット) で文字列を日時オブジェクトに変換できる。
  • CSVやログファイルなど、「文字列として保存されている日時」を扱うときに必須です。

日時処理ミニツール:締め切りチェック&期間表示

最後に、Day 41の要素を組み合わせた簡単な「締め切りチェックツール」のテンプレートを示します。

# day41_deadline_tool.py
from datetime import datetime, date, timedelta


def parse_date(date_str):
    """YYYY-MM-DD形式の文字列をdateオブジェクトに変換する関数です。"""
    return datetime.strptime(date_str, "%Y-%m-%d").date()


def calculate_deadline(start_date_str, days):
    """開始日と日数から締め切り日を計算する関数です。"""
    start_date = parse_date(start_date_str)
    delta = timedelta(days=days)
    deadline = start_date + delta
    return start_date, deadline


def days_until(deadline):
    """締め切り日まであと何日かを計算する関数です。"""
    today = date.today()
    delta = deadline - today
    return delta.days


def main():
    # 例:2024-01-01から7日後が締め切り
    start_str = "2024-01-01"
    days = 7

    start_date, deadline = calculate_deadline(start_str, days)

    print("=== 締め切り計算ツール ===")
    print("開始日:", start_date)
    print("締め切り日:", deadline)

    remaining = days_until(deadline)
    print("今日の日付:", date.today())
    print("締め切りまであと:", remaining, "日")


if __name__ == "__main__":
    main()
Python

このツールでは、

  • 文字列の開始日("2024-01-01")を date に変換し
  • 指定日数後の締め切り日を計算し
  • 今日から締め切りまで何日あるかを表示しています。

Day 41のまとめ

Day 41では、日時処理として、

  • datetime.now() で現在日時を取得し、年・月・日・時・分・秒を扱う方法
  • datetime(年, 月, 日, 時, 分, 秒) で特定の日時を表現する方法
  • timedelta を使って「3日後」「7日前」などの日時計算を行う方法
  • date 同士の引き算で期間(日数)を計算する方法
  • strftime() で日時を人間が読みやすい文字列に整形する方法
  • strptime() で文字列から日時オブジェクトを作る方法

をステップバイステップで体験していただきました。

ここまで来ると、 「締め切り管理」「期間計算」「ログの日時整形」など、時間に関わる処理をPythonで自在に扱う」 という感覚がかなり育っているはずです。

この日時処理の基礎は、 業務自動化だけでなく、ログ解析・スケジューラ・レポート生成など、 さまざまな場面で土台となる重要なスキルです。

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