Python datetime モジュール
Python のdatetimeモジュールは日付と時刻を処理するための標準ライブラリモジュールです。さまざまなクラスと関数を提供し、日付、時刻、時間差などの操作を簡単に処理できます。現在時刻の取得、日付のフォーマット、時間差の計算など、datetimeモジュールはすべて対応できます。
datetime モジュールのコアクラス
datetimeモジュールには以下のコアクラスが含まれています:
dateクラス -dateクラスは日付を表すために使用され、年、月、日の3つの属性を含みます。-
timeクラス -timeクラスは時刻を表すために使用され、時、分、秒、マイクロ秒などの属性を含みます。 -
datetimeクラス -datetimeクラスはdateとtimeの組み合わせであり、日付と時刻を同時に表すことができます。 -
timedeltaクラス -timedeltaクラスは時間差を表すために使用され、日付と時刻の加算・減算操作に使用できます。
datetime モジュールの使用
現在の日付と時刻を取得する
私たちはdatetimeクラスのnow()メソッドを使用して現在の日付と時刻を取得できます。
例
# 現在の日付と時刻を取得
now = datetime.now()
print("現在の時刻:", now)
出力例:
当前时间: 2025-04-22 14:30:45.123456
特定の日付と時刻を作成する
私たちはdatetimeクラスのコンストラクタを使用して特定の日付と時刻を作成できます。
例
# 特定の日付と時刻を作成
specific_time = datetime(2025, 4, 22, 15, 30, 0)
print("特定の時刻:", specific_time)
出力例:
特定时间: 2025-04-22 15:30:00
日付と時刻のフォーマット
datetimeオブジェクトはstrftime()メソッドを使用して文字列にフォーマットできます。
例
# 現在の時刻を取得
now = datetime.now()
# フォーマット出力
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("フォーマットされた時刻:", formatted_time)
出力例:
格式化时间: 2025-04-22 14:30:45
時間差の計算
timedeltaクラスは2つの日付または時刻の差を計算するために使用できます。
例
# 現在の時刻を取得
now = datetime.now()
# 10日後の時刻を計算
future_time = now + timedelta(days=10)
print("10日後の時刻:", future_time)
出力例:
10 天后的时间: 2025-05-02 14:30:45.123456
一般的な使用例
2つの日付間の日数を計算する
例
# 2つの日付を作成
date1 = date(2025, 4, 22)
date2 = date(2025, 5, 1)
# 日数の差を計算
delta = date2 - date1
print("2つの日付間の日数の差:", delta.days)
出力例:
两个日期之间的天数差: 9
タイムゾーンの処理
datetimeモジュール自体はタイムゾーン操作を直接サポートしていませんが、pytzライブラリを使用してタイムゾーンを処理できます。
例
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. 日付の差を計算する
例
d1 = date(2023, 5, 15)
d2 = date(2023, 6, 1)
delta = d2 - d1 # timedelta オブジェクトを返す
print(delta.days) # 出力: 17
2. 時刻の加算・減算
例
now = datetime.now()
future = now + timedelta(days=3, hours=2)
print(future.strftime("%Y-%m-%d %H:%M"))
3. タイムゾーン変換(pytz のインストールが必要)
例
import pytz
utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)
beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))
print(beijing_time)
4. 文字列の解析
例
dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt.year) # 出力: 2023
注意事項
不変性:すべての
datetimeオブジェクトは不変であり、操作により新しいオブジェクトが返されます。タイムゾーン処理:ネイティブの
datetimeはタイムゾーンをサポートしておらず、pytzまたは Python 3.9+ のzoneinfo。パフォーマンス:オブジェクトを頻繁に作成するとパフォーマンスに影響する可能性があるため、再利用またはキャッシュを検討してください。
境界チェック:不正な日付(例:
date(2023, 2, 30))は発生させますValueError。