Python datetime モジュール: timedelta, timezone, tzinfo の使い方
日付や時刻を扱うことは、開発者にとって日常的な作業であると言ってもいいでしょう。 特に時間に敏感なデータ、スケジューリング、ロギングを扱う場合はそうです。
Pythonには強力な標準ライブラリがあり、日付と時刻を効率的に扱うための datetime
というシンプルで強力なモジュールがあります。
この記事では datetime
モジュール、その主なクラスと関数、Python で日付と時刻を扱うためのベストプラクティスについて説明します。
VScodeでPythonを使う場合は、この投稿を参照してください。
1. Pythonのdatetimeモジュールを理解する
Python 標準ライブラリの datetime
モジュールは以下の関数を含んでいます:
datetime
、date
、time
、timedelta
、tzinfo
、その他日付や時刻を操作するためのいくつかのクラスがあります。
最も一般的なクラスとメソッドから始めましょう。
1.1. datetime.datetime
このクラスは、日付と時刻の両方の情報を持つ1つの時点を表します。 また、日付と時刻の値にアクセスして操作するためのさまざまなメソッドと属性を提供します。
それではまず datetime
オブジェクトを作りましょう。
from datetime import datetime
# 現在の日付と時刻
now = datetime.now()
print(now)
# 特定の日時
dt = datetime(2022, 9, 15, 10, 30)
print(dt)
このオブジェクトでアクセスできる属性は次のとおりです。
from datetime import datetime
now = datetime.now()
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"seconds: {now.second}")
print(f"Milliseconds: {now.microseconds}")
1.2 datetime.date
このクラスは日付(年、月、日)を表し、時間情報のない日付を扱うメソッドを提供します。
まず、欲しい情報を得るために date
オブジェクトを作成します。
from datetime import date
# 現在の日付
today = date.today()
print(today)
# 特定の日付
d = date(2022, 9, 15)
print(d)
1.3. datetime.time
このクラスは時間(時、分、秒、ミリ秒)を表し、日付情報を含まない時間値のみを扱うメソッドを提供します。
時刻情報を取得するには time
オブジェクトを作成します。
from datetime import time
# 特定の時間
t = time(10, 30, 15)
print(t)
datetime.timedelta
これは期間を表すとても便利なクラスで、datetime{:python
オブジェクトを使って、日、時間、分の足し算や引き算などの計算を行うことができます。
timedelta{:python
オブジェクトは以下のように作成できます:
from datetime import timedelta
# 5日、3時間、30分の期間を変数に宣言する。
delta = timedelta(days=5, hours=3, minutes=30)
print(delta)
datetime{:python
とtimedelta{:python
オブジェクトを使って特定の期間を計算してみましょう。
from datetime import datetime, timedelta
now = datetime.now()
# 5日後に計算
future = now + timedelta(days=5)
print(future)
# 3時間前に計算
past = now - timedelta(hours=3)
print(past)
2. タイムゾーンと UTC 時間 (UTC TIme) を扱う
datetime
モジュールは tzinfo
のサブクラスである timezone
クラスを提供し、タイムゾーンと UTC (協定世界時) のオフセットを扱うことができます。
また、 tzinfo
のサブクラスである timezone
クラスも提供する。
タイムゾーンを意識した datetime
オブジェクトを作成するには、 timezone
クラスと astimezone()
メソッドを使用します。
例を見てください。
from datetime import datetime, timezone
# 現在のUTC時間
utc_now = datetime.now(timezone.utc)
print(utc_now)
# 別のタイムゾーンに変換する
from pytz import timezone
tz = timezone("Asia/Seoul")
local_now = utc_now.astimezone(tz)
print(local_now)
上の例では、外部パッケージである pytz
ライブラリを使用して、指定されたタイムゾーンを処理しています。
pytz
ライブラリはPythonでタイムゾーンの変換を処理するために広く使われています。
3. 日付と時刻のフォーマットと解析
datetime
モジュールは日付と時刻を文字列としてフォーマットしたりパースしたりするための2つの便利なメソッドを提供します。
datetime.strptime(date_string, format)
: このメソッドは2つの引数を取ります。date_stringは日付と時刻の文字列表現、formatは入力文字列の日付と時刻の構造を指定するフォーマット文字列で、文字列から時刻情報を抽出します。datetime.strftime(format)
: このメソッドは、出力文字列の構造を指定するフォーマット文字列formatを引数にとります。このメソッドはdatetimeオブジェクトに対して呼び出され、指定されたフォーマットに従った日付/時刻の文字列表現を返します。
from datetime import datetime
# strptime() メソッドで文字列から時刻情報を読み込む。
date_string = "15-04-2023 16:30:00"
format_string = "%d-%m-%Y %H:%M:%S"
date_obj = datetime.strptime(date_string, format_string)
print(date_obj) # Output: 2023-04-15 16:30:00
# strftime() メソッドで時刻情報を文字列に変換する。
new_format_string = "%A, %B %d, %Y at %I:%M %p"
formatted_date = date_obj.strftime(new_format_string)
print(formatted_date) # Output: Saturday, April 15, 2023 at 04:30 PM
4. Python で日付と時刻を扱うためのベストプラクティス
ここまでで、Pythonの datetime
モジュールを使って日付と時刻を扱う基本を説明しました。
ここでは、このモジュールを使用する際に覚えておくべきベストプラクティスを紹介します。
- タイムゾーンを意識する
datetime
オブジェクトを使用する際に、タイムゾーンを意識することは重要な問題です。 異なるタイムゾーンで日付や時刻を扱うときは、サマータイムやローカルな時差のような問題を避けるために、常にdatetime
オブジェクトを使用してください。 - タイムゾーンの変換には
pytz
ライブラリを使用することを推奨します。pytz
ライブラリはタイムゾーンの広範で最新のデータベースを提供します。 これはPythonでタイムゾーンの変換を処理するために広く使われています。 - datetime オブジェクトを文字列に変換したり、文字列から情報を解析したりするには、
strftime()
メソッドとstrptime( )
メソッドを使用します。 これらのメソッドは Python で日付と時刻の文字列を扱うための一貫した柔軟な方法を提供します。
5. まとめ
この記事では、Python の datetime
モジュールの基本について説明しました。
また、タイムゾーンの扱い方、文字列のフォーマット、日付と時刻の解析のベストプラクティスについても説明しました。
さて、より具体的な内容については、datetime (opens in a new tab) の公式 Python ドキュメントを読むことをお勧めします。 公式ドキュメントは常に最良のガイドです。
特定のケースの解決法については、calculate, compare date/time、convert date/time、print date/timeを参照してください。 を投稿してください。
日付や時刻を扱うことは頻繁に遭遇することなので、時間をかけて理解しましょう。 一度コツをつかめば、将来、日付や時刻を操作するさまざまなタスクをこなせるようになります。
