Python datetime モジュール

Python のdatetimeモジュールは日付と時刻を処理するための標準ライブラリモジュールです。さまざまなクラスと関数を提供し、日付、時刻、時間差などの操作を簡単に処理できます。現在時刻の取得、日付のフォーマット、時間差の計算など、datetimeモジュールはすべて対応できます。

datetime モジュールのコアクラス

datetimeモジュールには以下のコアクラスが含まれています:

  • dateクラス -dateクラスは日付を表すために使用され、年、月、日の3つの属性を含みます。

  • timeクラス -timeクラスは時刻を表すために使用され、時、分、秒、マイクロ秒などの属性を含みます。

  • datetimeクラス -datetimeクラスはdateとtimeの組み合わせであり、日付と時刻を同時に表すことができます。

  • timedeltaクラス -timedeltaクラスは時間差を表すために使用され、日付と時刻の加算・減算操作に使用できます。


datetime モジュールの使用

現在の日付と時刻を取得する

私たちはdatetimeクラスのnow()メソッドを使用して現在の日付と時刻を取得できます。

例

from datetime import datetime

# 現在の日付と時刻を取得
now = datetime.now()
print("現在の時刻:", now)

出力例:

当前时间: 2025-04-22 14:30:45.123456

特定の日付と時刻を作成する

私たちはdatetimeクラスのコンストラクタを使用して特定の日付と時刻を作成できます。

例

from datetime import datetime

# 特定の日付と時刻を作成
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("特定の時刻:", specific_time)

出力例:

特定时间: 2025-04-22 15:30:00

日付と時刻のフォーマット

datetimeオブジェクトはstrftime()メソッドを使用して文字列にフォーマットできます。

例

from datetime import datetime

# 現在の時刻を取得
now = datetime.now()

# フォーマット出力
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("フォーマットされた時刻:", formatted_time)

出力例:

格式化时间: 2025-04-22 14:30:45

時間差の計算

timedeltaクラスは2つの日付または時刻の差を計算するために使用できます。

例

from datetime import datetime, timedelta

# 現在の時刻を取得
now = datetime.now()

# 10日後の時刻を計算
future_time = now + timedelta(days=10)
print("10日後の時刻:", future_time)

出力例:

10 天后的时间: 2025-05-02 14:30:45.123456

一般的な使用例

2つの日付間の日数を計算する

例

from datetime import date

# 2つの日付を作成
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)

# 日数の差を計算
delta = date2 - date1
print("2つの日付間の日数の差:", delta.days)

出力例:

两个日期之间的天数差: 9

タイムゾーンの処理

datetimeモジュール自体はタイムゾーン操作を直接サポートしていませんが、pytzライブラリを使用してタイムゾーンを処理できます。

例

from datetime import datetime
import pytz

# 現在の時刻を取得してタイムゾーンを設定
now = datetime.now(pytz.timezone('Asia/Shanghai'))
print("上海の現在の時刻:", now)

出力例:

上海当前时间: 2025-04-22 14:30:45.123456+08:00

よく使うクラス、メソッド、属性

1. コアクラス

类 説明 例
datetime.date 日付クラス(年、月、日) date(2023, 5, 15)
datetime.time 時刻クラス(時、分、秒、マイクロ秒) time(14, 30, 0)
datetime.datetime 日時クラス(日付と時刻を含む) datetime(2023, 5, 15, 14, 30)
datetime.timedelta 時間間隔クラス(日付/時刻の計算用) timedelta(days=5)
datetime.tzinfo タイムゾーン情報の基底クラス(サブクラス化して実装する必要があります) カスタムタイムゾーンクラス

2. dateオブジェクトのよく使うメソッド/属性

メソッド/属性 説明 例
date.today() 現在のローカル日付を返す date.today() → date(2023, 5, 15)
date.fromisoformat(str) からYYYY-MM-DD文字列から日付を解析する date.fromisoformat("2023-05-15")
date.year 年(読み取り専用) d.year → 2023
date.month 月(1-12、読み取り専用) d.month → 5
date.day 日(1-31、読み取り専用) d.day → 15
date.weekday() 曜日を返す(0=月曜日、6=日曜日) d.weekday() → 0
date.isoformat() 返すYYYY-MM-DDフォーマット文字列 d.isoformat() → "2023-05-15"
date.strftime(format) カスタムフォーマット出力 d.strftime("%Y/%m/%d") → "2023/05/15"

3. timeオブジェクトのよく使うメソッド/属性

メソッド/属性 説明 例
time.hour 時(0-23、読み取り専用) t.hour → 14
time.minute 分(0-59、読み取り専用) t.minute → 30
time.second 秒(0-59、読み取り専用) t.second → 0
time.microsecond マイクロ秒(0-999999、読み取り専用) t.microsecond → 0
time.isoformat() 返すHH:MM:SS.mmmmmmフォーマット文字列 t.isoformat() → "14:30:00"
time.strftime(format) カスタムフォーマット出力 t.strftime("%H:%M") → "14:30"

4. datetimeオブジェクトのよく使うメソッド/属性

メソッド/属性 説明 例
datetime.now() 現在のローカル日時を返す datetime.now() → datetime(2023, 5, 15, 14, 30, 0)
datetime.utcnow() 現在の UTC 日時を返す datetime.utcnow()
datetime.fromtimestamp(ts) タイムスタンプから作成するdatetimeオブジェクト datetime.fromtimestamp(1684146600)
datetime.timestamp() タイムスタンプを返す(浮動小数点数秒) dt.timestamp() → 1684146600.0
datetime.date() 日付部分を抽出する dt.date() → date(2023, 5, 15)
datetime.time() 時刻部分を抽出する dt.time() → time(14, 30)
datetime.year 年(date クラスと同じ)date) dt.year → 2023
datetime.strftime(format) カスタムフォーマット出力 dt.strftime("%Y-%m-%d %H:%M") → "2023-05-15 14:30"

5. timedeltaオブジェクトのよく使う属性

属性 説明 例
days 日数(正または負) delta.days → 5
seconds 秒数(0-86399) delta.seconds → 3600(1時間)
microseconds マイクロ秒数(0-999999) delta.microseconds → 0

6. よく使うフォーマット記号(strftime)

記号 説明 出力例
%Y 4桁の年 2023
%m 2桁の月(01-12) 05
%d 2桁の日(01-31) 15
%H 24時間制の時(00-23) 14
%M 分(00-59) 30
%S 秒(00-59) 00
%A 完全な曜日名 Monday
%a 省略形の曜日名 Mon
%B 完全な月名 May
%b 省略形の月名 May

例

1. 日付の差を計算する

例

from datetime import date, timedelta

d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1  # timedelta オブジェクトを返す
print(delta.days)  # 出力: 17

2. 時刻の加算・減算

例

from datetime import datetime, timedelta

now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))

3. タイムゾーン変換(pytz のインストールが必要)

例

from datetime import datetime
import pytz

utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)

4. 文字列の解析

例

from datetime import datetime

dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year)  # 出力: 2023

注意事項

  1. 不変性:すべてのdatetimeオブジェクトは不変であり、操作により新しいオブジェクトが返されます。

  2. タイムゾーン処理:ネイティブのdatetimeはタイムゾーンをサポートしておらず、pytzまたは Python 3.9+ のzoneinfo。

  3. パフォーマンス:オブジェクトを頻繁に作成するとパフォーマンスに影響する可能性があるため、再利用またはキャッシュを検討してください。

  4. 境界チェック:不正な日付(例:date(2023, 2, 30))は発生させますValueError。

その他の拡張