Python で文字列を日時に変換する方法

公開: 2022-12-20

あるタイプのデータから別のタイプのデータへの変換は、どのプログラミング言語でも重要です。 ほとんどすべてのプログラミング言語は、組み込みデータ型の型変換をサポートしています。

datetime などのカスタム データ型には、変換用の追加モジュールが必要です。 プログラマーにとってモジュールを操作するのは決して簡単ではなかったため、特にdatetime変換にはモジュールが必要です。 幸いなことに、Python には datetime を操作するための組み込みモジュールがあります。

さまざまなモジュールを使用して、Python でdatetime文字列をdatetimeオブジェクトに変換する方法を学習します。 それに飛び込む前に、そもそも変換する必要がある理由を見てみましょう。

日時文字列を日時オブジェクトに変換する必要があるのはなぜですか?

日付を操作する必要がある場合、文字列形式では操作が簡単ではありません。 それらを日時形式に変換すると、それらの操作が非常に簡単になります。 文字列の日付は通常の文字列と同じです。 日付を操作するための特別なメソッドはありません。 日付を操作する際には必要ない一般的な文字列メソッドがあります。

2 つの日付を比較する必要があるとします。 文字列形式であれば、正しく比較できます。 datetime形式の場合は、数値などの比較演算子を使用できます。

これは、 datetime形式への変換が簡単になるシナリオの 1 つにすぎません。 日付の加算、減算、タイムゾーンの処理など、 datetime文字列をdatetimeオブジェクトに変換することで、私たちの生活がこれまで以上に簡単になるシナリオはたくさんあります。

そうは言っても、 datetime文字列をdatetimeオブジェクトに変換するさまざまな方法を見てみましょう。 組み込みのdatetimeおよびサードパーティのdateutilモジュールを使用して、 datetime文字列をdatetimeオブジェクトに変換します。 datetime モジュールから始めましょう

日時の使用

datetimeは、日付と時刻を操作するために使用される Python の組み込みモジュールです。 このモジュールには、日付と時刻を扱うのに役立つクラスがたくさんあります。 変換にはdatetime.datetimeクラスを使用します。

datetime.datetimeには多くのメソッドがあります。 変換に役立つstrptimeメソッドに関心があります。 確認しましょう。

日時.strptime

datetime.strptimeメソッドは、 datetime文字列をdatetimeオブジェクトに変換するために使用されます。 2 つの文字列が必要です。1 つはdatetime文字列で、もう 1 つはそのdatetime文字列の形式です。 そして、 datetimeオブジェクトを返します。

例を見てみましょう

from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

上記のコードを実行すると、次の出力が表示されます。

 2022-12-19 21:37:56

datetime文字列を取得し、 datetime.strptimeメソッドを使用してそれをdatetimeオブジェクトに変換しました。 メソッドに指定する形式がdatetime文字列と正確に一致していることを確認してください。 それらが一致しなかった場合、エラーまたは正しくない出力が得られる可能性があります。

datetime形式にいくつかの形式コードを使用しました。 ドキュメント内のすべての形式コードを参照できます。

datetime.strptimeメソッドは完全なdatetimeを返します。 日付と時刻を別々に取得したい場合は、 datetimeオブジェクトのtimeメソッドを使用できます。 コードを見てみましょう。

 from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())

上記のコードを実行すると、次の出力が表示されます。

 Date: 2022-12-19 Time: 21:37:56

メソッドdatetimeは、それぞれのオブジェクトを返します。 日付と時刻については、それぞれのメソッドがあります。

上記のdatetime.strptimeメソッドに正しい文字列と形式を提供しました。 それらを正しく提供しなかった場合、エラーが発生します。 これらのエラーを処理する方法を見てみましょう。 次のコードを実行します。

 from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))

上記のコードは、フォーマットがdatetime文字列と一致しないため、エラーをスローします。 この種のエラーを処理するには、Python の try-except を使用できます。 追加しましょう。

 from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)

ここで、コードをもう一度実行します。 コードを壊すことなく、次のエラー メッセージが表示されます。

 time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

同様に、次のparser.parseメソッドにも try-except を追加できます。 途中でコードを壊さないようにするのに役立ちます。 これは、このチュートリアルのコンテキストとは特に関係ありませんが、コードで使用することを思い出させてくれます。

datetimeモジュールは以上です。 次のモジュールdateutilに移りましょう。

dateutil の使用

モジュールdateutilは、 datetimeモジュールの拡張機能を提供します。 簡単に使用できる多くのメソッドにより、日付と時刻の操作が非常に簡単になります。 次のコマンドでモジュールをインストールしましょう。

 pip install python-dateutil

関心のあるメソッドはdateutil.parser.parseです。 datetime文字列をdatetimeオブジェクトに変換する方法を見てみましょう。

パーサー.パース

メソッドparser.parsedatetime文字列を受け取り、それをそれぞれのdatetimeオブジェクト形式に変換します。 このメソッドにフォーマットを指定する必要はありません。 指定されたdatetime文字列をdatetimeオブジェクトに自動的に変換します。 例を見てみましょう。

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))

上記のコードを実行すると、次の出力が表示されます。

 2022-12-19 21:37:56

datetime文字列は、 parser.parseメソッドが受け入れる特定の形式である必要があります。 datetime文字列の形式が目的の形式と異なる場合、エラーがスローされます。 自動変換に使用できるすべての日時文字列形式を確認できます。

parser.parseメソッドはdatetimeオブジェクトを返すので、 datetimeモジュールで見たように、 dateオブジェクトとtimeオブジェクトに別々にアクセスできます。 コードを見てみましょう。

 from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())

上記のコードを実行すると、以下の出力が表示されます。

 Date: 2022-12-19 Time: 21:37:56

ご覧のとおり、 dateutilを使用すると、日付と時刻を比較的簡単に操作できます。 ドキュメントでモジュールを調べることができます。

結論

1 つの組み込みモジュールと 1 つのサードパーティ モジュールを使用して、 datetime文字列を DateTime オブジェクトに変換しました。 datetimeおよびdateutilモジュールと同様に、 datetime文字列を DateTime オブジェクトに変換できるtimeという別の組み込みモジュールがあります。 自分で試してみてください。 他のモジュールで同様のことをすでに行っているので、難しいことではありません。

同じことを実現できるライブラリが他にもあるかもしれません。 Thing チュートリアルで使用したモジュールは、標準的で広く使用されています。 他のモジュールについて詳しく調べて、自分に最適なモジュールを選択できます。

Python で時差を計算する方法を調べることもできます。

ハッピーコーディング