はじめに
Python のdatetimeモジュールは、日付と時刻を操作するための一連のクラスを提供します。この実験では、このモジュールから最も一般的に使用されるクラスと関数のいくつかを調べ、日付、時刻、および時間差の操作など、さまざまなタスクを実行するためにそれらをどのように使用するかを学びます。
到達目標
datetimeモジュール
datetime モジュールのインポート
datetimeモジュールを使用し始めるには、まずそれをインポートする必要があります。
新しい Python インタプリタセッションを開きます:
python3
これは、次のコード行を使用して行うことができます:
import datetime
日付の操作
datetimeモジュールは、日付の操作に使用するdateクラスを提供します。特定の日付を表す日付オブジェクトを作成するには、date()コンストラクタを使用できます。このコンストラクタには、年、月、日の 3 つの引数が必要です。たとえば:
d = datetime.date(2021, 12, 31)
print(d)
これにより、2021 年 12 月 31 日を表す日付オブジェクトが作成され、「YYYY-MM-DD」形式で表示されます。
時刻の操作
日付に加えて、datetimeモジュールは時刻の操作に使用するtimeクラスも提供します。特定の時刻を表す時刻オブジェクトを作成するには、time()コンストラクタを使用できます。このコンストラクタには、時、分、秒の 3 つの引数が必要です。たとえば:
t = datetime.time(12, 30, 15)
print(t)
これにより、午後 12 時 30 分 15 秒を表す時刻オブジェクトが作成され、「HH:MM:SS」形式で表示されます。
日付と時刻の組み合わせ
日付と時刻の両方を扱うには、日付と時刻を組み合わせたdatetimeクラスを使用できます。特定の日付と時刻を表すdatetimeオブジェクトを作成するには、datetime()コンストラクタを使用できます。このコンストラクタには、年、月、日、時、分、秒の 6 つの引数が必要です。たとえば:
dt = datetime.datetime(2021, 12, 31, 12, 30, 15)
print(dt)
これにより、2021 年 12 月 31 日午後 12 時 30 分 15 秒を表すdatetimeオブジェクトが作成され、「YYYY-MM-DD HH:MM:SS」形式で表示されます。
時間差分の操作
特定の日付と時刻を扱う以外に、datetimeモジュールは時間の期間を扱うためのtimedeltaクラスも提供します。timedeltaオブジェクトは時間の期間を表し、datetimeオブジェクトに加算または減算することができ、新しいdatetimeオブジェクトを生成します。たとえば:
d1 = datetime.date(2021, 12, 31)
d2 = d1 + datetime.timedelta(days=1)
print(d2)
これは 1 日を表すtimedeltaオブジェクトを作成し、それをdateオブジェクトd1に加算して、2022 年 1 月 1 日を表す新しいdateオブジェクトを生成し、「YYYY-MM-DD」形式で表示します。
日付と時刻の書式設定
datetimeモジュールは、datetimeオブジェクトを文字列として書式設定するためのstrftime()メソッドを提供します。このメソッドは、出力文字列の望ましい形式を指定する書式文字列引数を取ります。たとえば、次のコードはdatetimeオブジェクトを「YYYY-MM-DD HH:MM:SS」形式の文字列として書式設定します。
dt = datetime.datetime(2021, 12, 31, 12, 30, 15)
s = dt.strftime('%Y-%m-%d %H:%M:%S')
print(s)
出力は「2021-12-31 12:30:15」になります。
文字列から日付と時刻を解析する
datetimeモジュールは、文字列から解析してdatetimeオブジェクトを作成するためのstrptime()クラスメソッドも提供します。このメソッドは 2 つの引数を取ります。解析する文字列と、入力文字列の期待される形式を指定する書式文字列です。たとえば、次のコードは「YYYY-MM-DD HH:MM:SS」形式の文字列を解析してdatetimeオブジェクトを作成します。
s = '2021-12-31 12:30:15'
dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')
print(dt)
出力は「2021-12-31 12:30:15」になります。
書式文字列は、日付と時刻の異なる部分に対応する文字の文字列です。たとえば、年、月、日、時、分、秒などです。
書式文字列で最も一般的に使用される文字のいくつかを以下に示します。
%Y:世紀を含む年を 10 進数で表す。たとえば、「2022」%m:ゼロ埋めされた 10 進数で表される月。たとえば、1 月は「01」、12 月は「12」%d:ゼロ埋めされた 10 進数で表される月の日。たとえば、月の 1 日は「01」、月の最終日は「31」%H:24 時間表記の時をゼロ埋めされた 10 進数で表す。たとえば、真夜中は「00」、正午は「12」、午後 11 時は「23」%M:ゼロ埋めされた 10 進数で表される分。たとえば、時の始まりは「00」、半分は「30」%S:ゼロ埋めされた 10 進数で表される秒。たとえば、分の始まりは「00」、終わりは「59」
これらの文字に加えて、書式文字列には入力文字列と一致するリテラル文字も含めることができます。たとえば、次の書式文字列は「YYYY-MM-DD」形式の日付と一致します。
fmt = '%Y-%m-%d'
その後、strptime()メソッドはこの書式文字列を使用して入力文字列を解析し、そこから年、月、日を抽出します。
重要なことは、書式文字列が入力文字列と正確に一致しなければならないことです。そうでなければ例外が発生します。入力文字列の形式が分からない場合は、tryとexcept文を使用して発生する可能性のある例外を処理することができます。
また、strptime()メソッドはスレッドセーフでない、速度が遅いなどの問題があるため、一般的には推奨されていません。より柔軟で効率的なdateutil.parser.parse()関数を使用することが推奨されます。
タイムゾーンの操作
datetimeモジュールは、タイムゾーンを扱うためのpytzライブラリも提供しています。使用するには、コマンドラインでpip install pytzを実行して最初にインストールする必要があります。
インストール後、特定のタイムゾーン用のタイムゾーンオブジェクトを作成するためにpytz.timezone関数を使用できます。たとえば:
from datetime import datetime
import pytz
dt = datetime.now(pytz.timezone('US/Pacific'))
print(dt)
これにより、太平洋標準時(米国)のタイムゾーンに現在の日付と時刻を持つdatetimeオブジェクトが作成され、「YYYY-MM-DD HH:MM:SS-TZ」形式で表示されます。
まとめ
この実験では、Python のdatetimeモジュールから最も一般的に使用されるクラスと関数のいくつかを調べ、日付、時刻、および時間間隔を扱うなど、さまざまなタスクを実行する方法を学びました。適切なコンストラクタを使用して日付、時刻、およびdatetimeオブジェクトを作成する方法、およびそれらを組み合わせて特定の時点を表す方法を見てきました。また、時間の期間を表すために使用できるtimedeltaクラスと、datetimeオブジェクトに対して算術演算を実行する方法についても学びました。
この実験で提供された例に加えて、datetimeモジュールには、タイムゾーンの操作、日付と時刻の書式設定、および文字列から日付と時刻の解析に関する他の多くの関数とクラスも提供されています。これは、Python でさまざまな時間関連の問題を解決するために使用できる強力で多用途のモジュールです。
この実験では、Python のdatetimeモジュールの高度な機能のいくつかを調べました。日付と時刻の形式変換、およびタイムゾーンの変換を含みます。日付と時刻を文字列として書式設定および解析するためのstrftime()とstrptime()メソッドの使い方、およびタイムゾーンを扱うためのpytzライブラリの使い方を学びました。これらのツールを使えば、Python で日付と時刻を効果的に扱い、さまざまな時間関連の問題を解決できるようになります。



