メインコンテンツにスキップ
モジュール 8 · レッスン 2 / 4コース内の 30/36~12 min
モジュールのレッスン (2/4)

datetime: 日付と時刻

datetime モジュールは、日付と時刻を表すクラスを提供します。

3つの主要なクラス

  • date — 日付のみ (年、月、日)
  • time — 時間のみ (時、分、秒、マイクロ秒)
  • datetime — 日付と時刻を合わせたもの
  • timedelta — 期間 (2 つの瞬間の差)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

「現在」: now および today

Python
datetime.now()        # current date + time
date.today()          # current date only

timedelta による算術演算

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta は、days、seconds、microseconds、milliseconds、を受け入れます。 minutes、hours、weeks (曖昧な months や years ではありません)。

フォーマット: strftime

パターンに従って日時→文字列を変換します。

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

最もよく使用されるディレクティブ: %Y 4 桁の年、%m 2 桁の月、%d 2 桁の日、 %H 24 時間、%M 分、%S 秒。

解析中: strptime

逆: 期待されるパターンを考慮すると、文字列 → 日時。

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO8601

データ交換には常に ISO 8601 形式 (YYYY-MM-DDTHH:MM:SS) を優先します。

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

タイムゾーンと認識される日時

デフォルトでは、Python の datetime オブジェクトは 単純 (タイムゾーン情報が含まれていないことを意味します) です。実際のアプリケーションの場合は、datetime.timezone.utc 経由でタイムゾーン情報を設定するか、zoneinfo モジュールを利用して、アプリケーションを認識することがベスト プラクティスです。

試してみてください

運動#python.m8.l2.e1
試行回数: 0読み込み中…

2025 年 1 月 1 日から 30 日後の日付を計算し、変数 `date_str` で 'YYYY-MM-DD' としてフォーマットします。 `date_str`を評価します。

エディターを読み込み中…
ヒントを表示

ベース + timedelta(days=30)、その後 .strftime

3 回の試行後に解決策が利用可能になります

復習演習

運動#python.m8.l2.e2
試行回数: 0読み込み中…

文字列 `s = '15/03/2025'` を指定すると、strptime を使用してそれを変数 `d` (datetime オブジェクト) に解析します。整数の曜日 `d.weekday()` (0=月、6=日) を評価します。

エディターを読み込み中…
ヒントを表示

イタリア語形式のパターンを使用した strptime。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#python.m8.l2.e3
試行回数: 0読み込み中…

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

エディターを読み込み中…
ヒントを表示

The difference between two dates returns a timedelta. Access the integer days with delta.days.

3 回の試行後に解決策が利用可能になります