Pythonのdatetimeとは?日付と時間の操作をわかりやすく解説
アプリケーション開発では、日付や時間の処理は避けて通れない重要な処理です。
Pythonで日付や時間を扱う際に重要な役割を果たすのが、標準ライブラリのdatetimeモジュールです。
datetimeモジュールを使うと、高精度な時間操作や日付計算、タイムゾーン対応など、さまざまな日時処理を簡単に実装できます。
本記事では、datetimeモジュールの各クラスの特徴と使い方、実務での具体的な活用例を詳しく説明します。
Contents
Pythonのdatetime
datetimeは、Python付属の日付と時間を扱うモジュールです。
プログラムで日付や時間を扱うとき、datetimeモジュールを使うと高精度な時間操作がおこなえます。datetimeモジュールは、Pythonをインストールした時点で利用できるため、追加のインストール作業は不要です。
datetimeでできること
datetimeモジュールを使うと、日付や時間に関するさまざまな処理がおこなえます。
現在の日時を取得したり、日付と時間の計算をしたりできます。例えば、1週間後の日付を計算したり、2つの日付の間が何日あるかを計算したりできます。
また、日付や時刻の比較もおこなえます。特定の日付が過去か未来かを判定したり、2つの時刻の前後関係を確認したりできます。
文字列と日時の相互変換も可能です。日付や時刻を文字列に変換したり、逆に文字列からdatetimeのインスタンスを作成したりできます。
タイムゾーンにも対応しています。世界各地の時刻を扱う場合でも、時差を考慮した時刻の計算や比較がおこなえます。
datetimeの主なクラスと使い方について
datetimeモジュールは、用途別に複数のクラスが利用できます。
本項では各クラスの使い方を見ていきましょう。
datetime.date
datetime.dateクラスは日付のみを扱うクラスです。年、月、日の情報を保持し、曜日の取得や日付の比較をおこなえます。
from datetime import date
today = date.today() # 今日の日付を取得
print(today.year) # 年を取得
print(today.weekday()) # 曜日を取得(0:月曜〜6:日曜)
# 日付の比較
date1 = date(2024, 1, 1)
date2 = date(2024, 12, 31)
print(date1 < date2) # True
print(date1 == date2) # False
datetime.time
datetime.timeクラスは時刻のみを扱うクラスです。時、分、秒、マイクロ秒の情報を保持し、時刻の比較や表示形式の変更が可能です。
from datetime import time
t = time(12, 30, 45) # 12時30分45秒
print(t.hour) # 時を取得
# 時刻の比較
time1 = time(9, 30, 0)
time2 = time(17, 30, 0)
print(time1 < time2) # True
print(time1 == time2) # False
# 異なる形式で文字列に変換して表示
print(time1.strftime(‘%I:%M %p’)) # 09:30 AM
print(time2.strftime(‘%H時%M分’)) # 17時30分
datetime.datetime:日付と時間を同時に扱う。
datetime.datetimeクラスは日付と時刻の両方を扱います。タイムスタンプの生成や日時の計算、比較をおこなえます。
from datetime import datetime, timedelta
now = datetime.now() # 現在の日時を取得
print(now.strftime(‘%Y-%m-%d %H:%M:%S’)) # 日時を文字列に変換
# 逆に、文字列からdatetimeオブジェクトを作成
date_string = “2024-12-31 23:59:59”
dt = datetime.strptime(date_string, ‘%Y-%m-%d %H:%M:%S’)
# タイムスタンプの生成
timestamp = datetime.timestamp(datetime.now())
print(f”UNIXタイムスタンプ: {timestamp}“)
# 日時の計算
future = dt + timedelta(hours=1)
print(f”1時間後: {future}“) # 1時間後: 2025-01-01 00:59:59
datetime.timedelta:時間の差を扱う。
datetime.timedeltaクラスは時間の差を表現します。日時の加算や減算、期間の比較をおこなえます。
from datetime import datetime, timedelta
now = datetime.now() # 現在日時
one_week = timedelta(days=7) # timedeltaの生成時に期間を設定
future = now + one_week # 加算により1週間後の日時を計算
print((future – now).days) # 日数の差を取得
# 期間の比較。
delta1 = timedelta(days=1, hours=12) # 1日と12時間
delta2 = timedelta(days=2) # 2日間
print(delta1 < delta2) # True
# 期間の計算。total_seconds()は秒数を求めます
total_hours = delta1.total_seconds() / 3600
print(f”総時間数: {total_hours}時間”) # 総時間数: 36.0時間
datetime.timezone:タイムゾーンを扱う。
世界各地の時差を考慮した日時の計算や、タイムゾーン間の変換をおこなえます。
from datetime import datetime, timezone, timedelta
# 複数のタイムゾーンを定義
utc = timezone.utc
jst = timezone(timedelta(hours=9))
hst = timezone(timedelta(hours=-10))
# 現在時刻を異なるタイムゾーンで表示
now = datetime.now(utc) # UTC時刻を取得
print(f”世界協定時 UTC: {now}“)
print(f”日本標準時 JST: {now.astimezone(jst)}“)
print(f”ハワイ時間 HST: {now.astimezone(hst)}“)
datetimeのクラスの活用場面
アプリケーション開発で日付や時間を扱う場面は多く、datetimeクラスは幅広く活用できます。
ログの記録
ログ記録では、システムの動作履歴やエラー発生時刻を記録するためにdatetimeを使用できます。
例えば、アプリケーションの障害対応をおこなううえで、正確な時刻情報は役立ちます。
def log_error(error_message):
timestamp = datetime.now().strftime(‘%Y-%m-%d %H:%M:%S’)
log_entry = f”[ERROR] {timestamp}: {error_message}“
print(log_entry) # 実際にはファイルに書き込むなど
log_error(“データベース接続エラーが発生しました”)
# [ERROR] 2024-08-20 14:30:45: データベース接続エラーが発生しました
スケジュール管理
スケジュール管理アプリケーションでは、datetimeを利用して予定の日時を保存し、通知のタイミングを計算できます。
class Schedule:
def __init__(self, title, scheduled_time):
self.title = title
self.scheduled_time = scheduled_time
def get_reminder_time(self, minutes_before=10):
return self.scheduled_time – timedelta(minutes=minutes_before)
meeting = Schedule(“会議”, datetime(2024, 8, 20, 15, 0))
reminder_time = meeting.get_reminder_time()
print(f”予定: {meeting.title}, 通知時刻: {reminder_time}“)
データ分析
データ分析の分野では、時系列データの処理にdatetimeを活用します。
売上データや気象データなど、日付や時間に紐づいたデータを分析する際に、期間の集計や比較をおこなえます。
sales_data = { # 日別売上データ
datetime(2024, 1, 1): 1000, datetime(2024, 1, 2): 1500,
datetime(2024, 1, 3): 1200
}
# 特定期間の売上集計
start_date = datetime(2024, 1, 1)
end_date = datetime(2024, 1, 3)
total_sales = sum(amount for date, amount in sales_data.items()
if start_date <= date <= end_date)
print(f”期間売上: {total_sales}円”)
まとめ
Pythonのdatetimeモジュールは、日付や時間の高精度な操作を可能にする標準ライブラリです。日時の計算、比較、文字列変換、タイムゾーン対応など、多彩な機能を備えています。
実際のアプリケーション開発で必要不可欠なモジュールですので、各クラスの基本的な使い方をマスターしましょう。