この記事では、Pythonで日付と時刻を扱うための標準ライブラリdatetime
モジュールの基本的な使い方を解説します。現在時刻の取得、特定の日時の表現、時間差の計算、そして日付と文字列の相互変換について説明します。
datetime
オブジェクト
datetime
モジュールの中核となるのがdatetime
オブジェクトです。これは、特定の日付と時刻(年、月、日、時、分、秒、マイクロ秒)を保持します。
datetime
オブジェクトの作成 datetime.datetime.now()
で現在のローカルな日時を取得できます。また、datetime.datetime(year, month, day, ...)
のように特定の日時を指定して生成することも可能です。
import datetime
import time
# 現在の日時を取得
now = datetime.datetime.now()
print(f"現在日時: {now}")
# 特定の日時を生成
dt = datetime.datetime(2025, 10, 31, 13, 30, 0)
print(f"指定日時: {dt}")
# 各要素にアクセス
print(f"年: {dt.year}, 月: {dt.month}, 日: {dt.day}")
print(f"時: {dt.hour}, 分: {dt.minute}, 秒: {dt.second}")
# Unixタイムスタンプからdatetimeオブジェクトを生成
timestamp = 1663322400 # 2022-09-16 19:00:00 JST
dt_from_ts = datetime.datetime.fromtimestamp(timestamp)
print(f"タイムスタンプから: {dt_from_ts}")
datetime
オブジェクトの比較 datetime
オブジェクト同士は、比較演算子(>
、<
、==
など)を使って比較できます。
halloween_2025 = datetime.datetime(2025, 10, 31, 0, 0, 0)
christmas_2025 = datetime.datetime(2025, 12, 25, 0, 0, 0)
print(f"クリスマスはハロウィンより後か: {christmas_2025 > halloween_2025}") # 出力: True
timedelta
データ型
timedelta
オブジェクトは、二つの日時の間の差、すなわち期間を表します。
datetime
オブジェクトにtimedelta
オブジェクトを足したり引いたりすることで、過去や未来の日時を簡単に計算できます。
import datetime
# 30日と12時間と30分の期間を定義
delta = datetime.timedelta(days=30, hours=12, minutes=30)
print(f"期間の合計秒数: {delta.total_seconds()}")
# 現在日時に期間を足す
now = datetime.datetime.now()
future_date = now + delta
print(f"現在: {now}")
print(f"30日と12時間30分後: {future_date}")
# 特定の日時から期間を引く
past_date = now - delta
print(f"30日と12時間30分前: {past_date}")
datetime
オブジェクトと文字列の相互変換
strftime()
:datetime
オブジェクトを文字列に変換 strftime()
メソッドは、datetime
オブジェクトを、指定した書式の文字列に変換します。書式は%Y
(4桁の年)などの書式指定コード
で定義します。
コード | 意味 | 例 |
%Y | 4桁の西暦年 | 2025 |
%y | 2桁の西暦年 | 25 |
%m | 2桁の月(0埋め) | 09 |
%B | 月の完全な名前 | September |
%b | 月の省略名 | Sep |
%d | 2桁の日(0埋め) | 16 |
%A | 曜日の完全な名前 | Tuesday |
%a | 曜日の省略名 | Tue |
%H | 24時間表記の時 | 19 |
%I | 12時間表記の時 | 07 |
%p | 午前/午後 | AM / PM |
%M | 2桁の分 | 30 |
%S | 2桁の秒 | 05 |
%% | % 文字自体 | % |
import datetime
dt = datetime.datetime(2025, 9, 16, 19, 30, 5)
# 書式を指定して文字列に変換
print(dt.strftime('%Y/%m/%d %H:%M:%S')) # 出力: 2025/09/16 19:30:05
print(dt.strftime('%I:%M %p')) # 出力: 07:30 PM
print(dt.strftime("%A, %B %d, %Y")) # 出力: Tuesday, September 16, 2025
strptime()
:文字列をdatetime
オブジェクトに変換 datetime.datetime.strptime()
はstrftime()
の逆で、書式を指定して文字列をdatetime
オブジェクトに変換(パース)します。
import datetime
date_string = "2025-09-16 19:30:05"
format_code = "%Y-%m-%d %H:%M:%S"
datetime_obj = datetime.datetime.strptime(date_string, format_code)
print(datetime_obj) # 出力: 2025-09-16 19:30:05
print(datetime_obj.year) # 出力: 2025
文字列とformat_code
の書式が一致していないとValueError
が発生します。
まとめ
datetime
モジュールは、日付と時刻を扱うための包括的な機能を提供します。datetime
オブジェクトで特定の日時を、timedelta
オブジェクトで期間を表現し、これらのオブジェクト間で演算を行うことができます。また、strftime()
とstrptime()
を使うことで、プログラムで扱いやすいオブジェクト形式と、人間が読みやすい文字列形式とを自在に相互変換できます。