はじめに
Pythonのdatetime
モジュールは、日付と時刻を操作するための一連のクラスを提供します。この実験では、このモジュールから最も一般的に使用されるクラスと関数のいくつかを調べ、日付、時刻、および時間差の操作など、さまざまなタスクを実行するためにそれらをどのように使用するかを学びます。
到達目標
datetime
モジュール
Pythonの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で日付と時刻を効果的に扱い、さまざまな時間関連の問題を解決できるようになります。