🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Pythonのdatetimeモジュールで日付と時刻を自由自在に操ろう!

PythonをコマンドプロンプトやPowerShellでPC上で動かすには、Pythonをダウンロードしてインストールする必要があります。
まだの方はPythonのインストールと開発環境の構築の記事を参考にして、Pythonをインストールしてください。

Webサイトやアプリケーションを開発していると、「今の時刻を表示したい」「記事の投稿日時を記録したい」「セール終了までの残り時間を計算したい」といった、日付や時刻を扱いたい場面がたくさん出てきます。そんな時に大活躍するのが、Pythonに標準で備わっているdatetimeモジュールです。

この記事では、datetimeモジュールの基本的な使い方から、ちょっとした応用テクニックまで、初心者の方でもコピペするだけで「動く!」を体験できるサンプルコードと共に、分かりやすく解説していきます。さっそく、日付と時刻の世界へ飛び込んでみましょう! 🚀


datetimeモジュールの基本の「き」

まずは、datetimeモジュールを使うための準備と、最も基本的な機能である「現在の日付と時刻の取得」から始めていきましょう。

モジュールのインポート

datetimeモジュールを使うには、まずコードの冒頭でインポート(読み込み)する必要があります。これがないと、Pythonは「datetimeって何?」となってしまいますからね。

import datetime

現在の日付と時刻を取得する

今この瞬間の日付と時刻を取得するのは、とても簡単です。`datetime.datetime.now()` を呼び出すだけです。

import datetime

# 現在の日付と時刻を取得
now = datetime.datetime.now()
print(now)

# 実行結果の例: 2025-07-11 07:42:15.123456

もし時刻は必要なく、今日の日付だけが欲しい場合は `datetime.date.today()` を使います。

import datetime

# 今日の日付だけを取得
today = datetime.date.today()
print(today)

# 実行結果の例: 2025-07-11

日付と時刻の各要素にアクセスする

取得した `datetime` オブジェクトからは、年、月、日、時、分、秒といった個別の情報を取り出すことができます。これは、例えば「今年は2025年です」のように表示したい場合に便利です。

import datetime

now = datetime.datetime.now()

print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")
print(f"時: {now.hour}")
print(f"分: {now.minute}")
print(f"秒: {now.second}")
print(f"マイクロ秒: {now.microsecond}")

特定の日付や時刻を自分で作る

現在時刻だけでなく、過去や未来の特定の日時を表すオブジェクトを作ることももちろん可能です。自分の誕生日や、サービスの開始日などを指定する際に使います。

import datetime

# 2026年1月1日 午前9時30分0秒を指定
specific_datetime = datetime.datetime(2026, 1, 1, 9, 30, 0)
print(specific_datetime)

# 実行結果: 2026-01-01 09:30:00

日付と時刻を見やすくフォーマットする

`2025-07-11 07:42:15` のような形式も悪くありませんが、Webサイト上では「2025年07月11日 07時42分」のように、もっと分かりやすく表示したいですよね。そんなときは `strftime()` メソッドの出番です。

strftime() で好きな書式の文字列に変換する

`strftime()` は "string format time" の略で、`datetime` オブジェクトを特定の書式文字列に変換してくれます。書式を指定するために、`%Y` や `%m` といった「フォーマットコード」を使います。

import datetime

now = datetime.datetime.now()

# フォーマットを指定して文字列に変換
formatted_string = now.strftime("%Y年%m月%d日 %H時%M分%S秒")
print(formatted_string)

# 実行結果の例: 2025年07月11日 07時42分15秒

よく使うフォーマットコードをいくつか紹介しますね。


strptime() で文字列を日時に変換する

逆に、「2025/07/11」のような文字列データをプログラムで扱える `datetime` オブジェクトに変換したい場合もありますよね。その際は `strptime()` メソッドを使います。"string parse time" の略で、文字列を解析してくれます。

重要: `strptime()` を使うときは、元の文字列の書式と、指定するフォーマットコードが完全に一致している必要があります。一致しないとエラーになってしまうので注意してください。

import datetime

date_string = "2025年7月11日"

# 文字列のフォーマットを指定してdatetimeオブジェクトに変換
# この例では日付だけなので、dateオブジェクトになる
date_obj = datetime.datetime.strptime(date_string, "%Y年%m月%d日").date()

print(date_obj)
print(type(date_obj))

# 実行結果:
# 2025-07-11
# <class 'datetime.date'>

応用編:日付や時刻を計算してみよう

datetimeモジュールの真骨頂は、日付や時刻の計算が簡単にできる点にあります。「1週間後の日付は?」「セール終了まであと何日?」といった計算を、`timedelta` オブジェクトを使って直感的に行えます。

timedelta で時間の差を表現する

`timedelta` は、2つの日時の間の期間(時間の差)を表すためのオブジェクトです。日数、秒数、マイクロ秒数などを指定して作ります。

import datetime

now = datetime.datetime.now()
print(f"現在時刻: {now.strftime('%Y-%m-%d %H:%M')}")

# 1週間後を計算
one_week_later = now + datetime.timedelta(weeks=1)
print(f"1週間後: {one_week_later.strftime('%Y-%m-%d %H:%M')}")

# 3日前を計算
three_days_ago = now - datetime.timedelta(days=3)
print(f"3日前:  {three_days_ago.strftime('%Y-%m-%d %H:%M')}")

# 10時間30分後を計算
ten_hours_later = now + datetime.timedelta(hours=10, minutes=30)
print(f"10時間30分後: {ten_hours_later.strftime('%Y-%m-%d %H:%M')}")

2つの日付の差を計算する

`datetime` オブジェクト同士を引き算すると、結果は `timedelta` オブジェクトになります。これを利用して、特定の日までの残り日数などを計算できます。

import datetime

# 今日の日付
today = datetime.date.today()

# ターゲットの日付(例えば、2026年の元旦)
new_year_2026 = datetime.date(2026, 1, 1)

# 2つの日付の差を計算
delta = new_year_2026 - today

print(f"2026年の元旦まで、あと {delta.days} 日です。")

気をつけるべき点:タイムゾーンの罠

ここまでの例で扱ってきた日時は、実はタイムゾーン情報を持っていない「ナイーブ (naive)」なオブジェクトです。個人で使う簡単なスクリプトなら問題ありませんが、世界中のユーザーがアクセスするWebサービスを作る場合、タイムゾーンは避けて通れない問題です。

例えば、日本の「7月11日 午前9時」と、アメリカの「7月11日 午前9時」は全く違う瞬間ですよね。この違いを正しく扱うためには、タイムゾーン情報を持った「アウェア (aware)」なオブジェクトを使う必要があります。

Python 3.9以降では、標準ライブラリの `zoneinfo` を使って簡単にタイムゾーンを扱えます。

import datetime
from zoneinfo import ZoneInfo

# タイムゾーンを指定して現在時刻を取得
tokyo_tz = ZoneInfo("Asia/Tokyo")
now_tokyo = datetime.datetime.now(tokyo_tz)
print(f"東京の現在時刻: {now_tokyo}")

newyork_tz = ZoneInfo("America/New_York")
now_newyork = datetime.datetime.now(newyork_tz)
print(f"ニューヨークの現在時刻: {now_newyork}")

# タイムゾーン情報が付与されているのがわかる
# 出力例:
# 東京の現在時刻: 2025-07-11 07:42:15.123456+09:00
# ニューヨークの現在時刻: 2025-07-10 18:42:15.123456-04:00

国際的なサービスを開発する際は、必ずタイムゾーンを意識した実装を心がけましょう!


【実践】コピペで動く!Webページで現在時刻を表示する

最後に、これまでの知識を活かして、Webページに日本標準時(JST)をリアルタイムで表示する、まるっとコピーして動かせるHTMLの例をご紹介します。このコードは、HTMLファイルとして保存すれば、ブラウザで開くだけで動作します。
※このサンプルでは時刻のリアルタイム更新のために、HTML内にJavaScriptを含んでいます。

以下のコードを `clock.html` のような名前で保存して、ブラウザで開いてみてください。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>リアルタイム時刻表示</title>
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            flex-direction: column;
        }
        h1 {
            color: #669df6;
        }
        #clock {
            font-size: 3rem;
            font-weight: bold;
            background-color: #3c4043;
            padding: 20px 40px;
            border-radius: 10px;
        }
    </style>
</head>
<body>
    <h1>現在の日本時刻</h1>
    <div id="clock">--:--:--</div>

    <script>
        function updateClock() {
            // 日本標準時(JST, UTC+9)で時刻を生成
            const now = new Date();
            const jstOffset = 9 * 60; // JSTはUTC+9時間
            const localOffset = -now.getTimezoneOffset(); // ローカルのタイムゾーンオフセット(分)
            const jstNow = new Date(now.getTime() + (jstOffset - localOffset) * 60 * 1000);

            const hours = String(jstNow.getHours()).padStart(2, '0');
            const minutes = String(jstNow.getMinutes()).padStart(2, '0');
            const seconds = String(jstNow.getSeconds()).padStart(2, '0');
            
            document.getElementById('clock').textContent = `${hours}:${minutes}:${seconds}`;
        }

        // 1秒ごとに時計を更新
        setInterval(updateClock, 1000);

        // ページ読み込み時に初回実行
        updateClock();
    </script>
</body>
</html>

まとめ

今回は、Pythonの `datetime` モジュールを使って、日付と時刻を扱う方法を学びました。

`datetime` モジュールを使いこなせれば、ログのタイムスタンプ、ユーザー登録日時の記録、イベントのカウントダウンなど、作れるものの幅がぐっと広がります。ぜひ、この記事のコードを色々といじって、自分だけのプログラムを作ってみてくださいね!

次のステップへ

日付や時刻の扱い方に慣れたら、次はファイルやディレクトリの操作に挑戦してみませんか?以下の記事では、Pythonでファイルを読み書きしたり、フォルダを作成・削除したりする方法を解説しています。

osモジュールでファイルやディレクトリを操作しよう »