IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Pythonのdatetimeとは?日付と時間の操作をわかりやすく解説

アプリケーション開発では、日付や時間の処理は避けて通れない重要な処理です。

Pythonで日付や時間を扱う際に重要な役割を果たすのが、標準ライブラリのdatetimeモジュールです。

datetimeモジュールを使うと、高精度な時間操作や日付計算、タイムゾーン対応など、さまざまな日時処理を簡単に実装できます。

本記事では、datetimeモジュールの各クラスの特徴と使い方、実務での具体的な活用例を詳しく説明します。

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モジュールは、日付や時間の高精度な操作を可能にする標準ライブラリです。日時の計算、比較、文字列変換、タイムゾーン対応など、多彩な機能を備えています。

実際のアプリケーション開発で必要不可欠なモジュールですので、各クラスの基本的な使い方をマスターしましょう。