閉じる

Pythonで日付と時刻を取得・比較・表示 (datetime入門)

Pythonで日付や時刻を扱うときは、標準ライブラリのdatetimeが基本です。

この記事では、現在の日時の取得、日付と時刻の比較、そして見やすい表示方法を、Python初心者の方にも分かりやすく丁寧に解説します。

インポートの仕方から具体的なコード例、実行結果まで一通り確認できる内容です。

Pythonのdatetime入門

標準ライブラリdatetimeの基本

datetimeは標準ライブラリなので、追加インストールなしで使えます

主に以下のクラスを使い分けます。

日付だけならdate、時刻だけならtime、両方をまとめて扱うならdatetimeという具合です。

日付の差分はtimedeltaで表現できます。

date/time/datetimeの違い

3つのクラスの違いは、どの情報を保持するかにあります。

初心者の方は、まず「何を持っているか」で選ぶと迷いにくいです。

クラス含む情報主な用途
date年・月・日2025-05-01休日判定、日付だけの比較や表示
time時・分・秒・マイクロ秒09:30:00営業時間の開始時刻などの表現
datetime年月日と時分秒の両方2025-05-01 09:30:00発生時刻の記録、並び替えや比較

迷ったらdatetimeで始めて、必要なときに.date().time()を取り出すのが扱いやすいです。

importの書き方(import datetime)

初心者の方には名前空間が分かりやすいimport datetimeをおすすめします。

クラス名がモジュール名と同じdatetimeなので、最初は「モジュール.クラス」の形で書けると安全です。

Python
# 推奨: 明示的にモジュールを保ったまま使う
import datetime

now = datetime.datetime.now()  # モジュール名(datetime) + クラス名(datetime)

# よく見る別解1: 必要なクラスだけ取り出す
from datetime import datetime, date

now2 = datetime.now()
today = date.today()

# 別解2: 短縮名を使う
import datetime as dt
now3 = dt.datetime.now()

チームで統一するなら、最初はimport datetimeに揃えると混乱が少ないです。

日付と時刻を取得する(now/today)

現在の日時を取得する(datetime.now)

現在の日時はdatetime.datetime.now()で取得します。

取得されるのはローカルタイムで、タイムゾーン情報は含まれない「ナイーブ」なdatetimeです。

Python
# 現在の日時を取得する基本
import datetime

now = datetime.datetime.now()

print(now)               # デフォルトの文字列表現
print(now.isoformat())   # ISO 8601形式 (T区切り)
print(now.year, now.month, now.day)  # 年・月・日を個別に参照
実行結果
2025-09-16 10:23:45.678901
2025-09-16T10:23:45.678901
2025 9 16

タイムゾーン付きの扱いは入門範囲外ですが、将来必要になったらzoneinfopytzの知識が役立ちます。

今日の日付を取得する(date.today)

日付だけ欲しいときはdate.today()が簡単です。

時刻は含まれません。

Python
import datetime

today = datetime.date.today()

print(today)             # デフォルト表現
print(today.isoformat()) # ISO 8601形式
print(today.year, today.month, today.day)
実行結果
2025-09-16
2025-09-16
2025 9 16

特定の日時を作る(datetimeで生成)

好きな年月日時分秒を指定してdatetimeインスタンスを作れます。

日付だけ、時刻だけを作ることもできます。

Python
import datetime

# 2024年12月31日 23時59分00秒の日時を作る
dt_specific = datetime.datetime(2024, 12, 31, 23, 59, 0)
print(dt_specific)
print(dt_specific.isoformat())

# 日付だけを作る
d = datetime.date(2025, 1, 2)
print(d)

# 時刻だけを作る
t = datetime.time(9, 30, 0)
print(t)

# うるう年の注意: 存在しない日付はValueErrorになる
try:
    ok = datetime.date(2024, 2, 29)  # 2024年はうるう年
    print("OK:", ok)
    bad = datetime.date(2023, 2, 29)  # 存在しない日付
except ValueError as e:
    print("ValueError:", e)
実行結果
2024-12-31 23:59:00
2024-12-31T23:59:00
2025-01-02
09:30:00
OK: 2024-02-29
ValueError: day is out of range for month

うるう年や範囲に注意

月は1〜12、日は各月の範囲内である必要があります。

存在しない日付や時刻を渡すとValueErrorになります。

日付と時刻を比較する(大小・同値)

比較演算子(>, <, ==)で比較

datetimeやdateはそのまま比較演算子で大小や等価を比較できます

同じ種類同士の比較が基本です。

Python
import datetime

a = datetime.datetime(2025, 5, 1, 9, 0)
b = datetime.datetime(2025, 5, 1, 18, 0)
c = datetime.datetime(2025, 5, 1, 9, 0)

print("a < b:", a < b)     # 9時は18時より前
print("a == c:", a == c)   # 同じ瞬間
print("b > c:", b > c)     # 18時は9時より後

# 日付同士の比較もOK
d1 = datetime.date(2025, 5, 1)
d2 = datetime.date(2025, 5, 2)
print("d1 < d2:", d1 < d2)
実行結果
a < b: True
a == c: True
b > c: True
d1 < d2: True
注意

タイムゾーン付きdatetimeとタイムゾーンなしdatetimeは直接比較できません。

その場合はどちらかに統一してください。

日付だけを比較する(dateに変換)

同じ日かどうか、または日付の前後だけを見たい場合はdatetimeから.date()で日付を取り出して比べるのが簡単です。

Python
import datetime

start = datetime.datetime(2025, 5, 1, 23, 30)
end   = datetime.datetime(2025, 5, 2, 1, 15)

# 日付だけを取り出して比較
print("start.date() == end.date():", start.date() == end.date())

# 同じ日かどうかを関数にする
def is_same_day(x: datetime.datetime, y: datetime.datetime) -> bool:
    return x.date() == y.date()

print("same day?", is_same_day(start, end))
実行結果
start.date() == end.date(): False
same day?: False

日付の境界をまたぐ処理のバグは、時刻まで含めて比較してしまうと起きやすいです。

日付だけにしたいときは.date()に揃えましょう。

日付と時刻を表示する(基本)

printとisoformatで表示

人にも機械にも読みやすいのはisoformat()です。

printはデフォルトで見やすい表現になりますが、標準化された形式が必要なときはisoformat()を使います。

Python
import datetime

dt = datetime.datetime(2025, 1, 2, 3, 4, 5, 678901)

print("print:", dt)               # デフォルト表現
print("isoformat:", dt.isoformat())  # T区切りのISO 8601
print("date iso:", dt.date().isoformat())  # 日付だけのISO
実行結果
print: 2025-01-02 03:04:05.678901
isoformat: 2025-01-02T03:04:05.678901
date iso: 2025-01-02

ログやファイル保存などの外部出力にはisoformat()を優先すると、後からパースしやすくなります。

f文字列で年・月・日・時・分を取り出す

自由な表示形式を作るならf文字列で属性を直接埋め込むのが簡単です。

ゼロ埋めは:02dなどのフォーマット指定で行います。

Python
import datetime

dt = datetime.datetime(2025, 7, 14, 8, 5)

# 和文として見やすい書式
msg = f"{dt.year}年{dt.month}月{dt.day}日 {dt.hour:02d}:{dt.minute:02d}"
print(msg)

# 英数字のみの書式
msg2 = f"{dt.year}/{dt.month:02d}/{dt.day:02d} {dt.hour:02d}:{dt.minute:02d}"
print(msg2)
実行結果
2025年7月14日 08:05
2025/07/14 08:05

より柔軟な書式指定や文字列から日時への変換にはstrftimestrptimeを使いますが、これは別の記事で詳しく扱います。

まとめ

本記事では、datetimeの基本である「取得」「比較」「表示」に絞って解説しました。

まずはimport datetimeで始め、現在時刻はdatetime.datetime.now()、今日の日付はdate.today()で取得し、比較はふつうの比較演算子で行えます。

日付だけを比較したいときは.date()で揃えるのが安全で、出力はisoformat()やf文字列で見やすく整えられます。

次のステップとして、書式変換(strftime/strptime)や日付計算(timedelta)に進むと、日付時刻の扱いがさらに強力になります。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!