[Python] 文字列の日付をdatetimeに変換する方法

Pythonでは、文字列形式の日付をdatetimeオブジェクトに変換するためにdatetimeモジュールのstrptime関数を使用します。

この関数は、日付文字列とそのフォーマットを指定することで、文字列をdatetimeオブジェクトに変換します。

例えば、日付文字列\”2023-10-15\”をdatetimeに変換するには、datetime.strptime("2023-10-15", "%Y-%m-%d")と記述します。

この方法を使うことで、日付の計算や操作が容易になります。

この記事でわかること
  • datetimeモジュールのインポートと基本的な使用方法
  • さまざまな日付フォーマットの文字列をdatetimeに変換する方法
  • 日付の計算、比較、フォーマット変更の実践例
  • タイムゾーンを考慮した日付変換の方法

目次から探す

文字列をdatetimeに変換する基本

Pythonで文字列を日付オブジェクトに変換することは、データ処理や分析において非常に重要です。

ここでは、datetimeモジュールを使用して、文字列をdatetimeオブジェクトに変換する基本的な方法を解説します。

datetimeモジュールのインポート

まずは、datetimeモジュールをインポートする必要があります。

このモジュールには、日付や時間を操作するための便利なクラスや関数が含まれています。

import datetime

このインポートにより、datetimeモジュール内のクラスや関数を使用できるようになります。

strptimeメソッドの基本

strptimeメソッドは、文字列をdatetimeオブジェクトに変換するために使用されます。

このメソッドは、文字列とそのフォーマットを引数として受け取ります。

date_string = "2023-10-15"
date_format = "%Y-%m-%d"
date_object = datetime.datetime.strptime(date_string, date_format)
print(date_object)
2023-10-15 00:00:00

この例では、"2023-10-15"という文字列を"%Y-%m-%d"というフォーマットでdatetimeオブジェクトに変換しています。

文字列フォーマットの指定方法

strptimeメソッドを使用する際には、文字列のフォーマットを正しく指定する必要があります。

以下は、よく使用されるフォーマット指定子の一覧です。

スクロールできます
フォーマット指定子説明
%Y4桁の年
%m2桁の月
%d2桁の日
%H2桁の時(24時間表記)
%M2桁の分
%S2桁の秒

これらの指定子を組み合わせて、文字列のフォーマットを定義します。

例外処理の実装

文字列をdatetimeに変換する際には、フォーマットが一致しない場合に例外が発生することがあります。

これを防ぐために、例外処理を実装することが重要です。

date_string = "2023-10-15"
date_format = "%Y-%m-%d"
try:
    date_object = datetime.datetime.strptime(date_string, date_format)
    print(date_object)
except ValueError as e:
    print(f"日付の変換に失敗しました: {e}")
2023-10-15 00:00:00

この例では、tryブロック内で変換を試み、ValueErrorが発生した場合にはexceptブロックでエラーメッセージを表示します。

これにより、プログラムが予期しないエラーで停止するのを防ぎます。

さまざまな日付フォーマットの変換

Pythonのdatetimeモジュールを使用すると、さまざまな日付フォーマットの文字列をdatetimeオブジェクトに変換することができます。

ここでは、一般的な日付フォーマットの変換方法を紹介します。

年月日のみのフォーマット

年月日のみを含む文字列をdatetimeオブジェクトに変換する場合、%Y-%m-%dのフォーマットを使用します。

import datetime
date_string = "2023-10-15"
date_format = "%Y-%m-%d"
date_object = datetime.datetime.strptime(date_string, date_format)
print(date_object)
2023-10-15 00:00:00

この例では、年月日のみを指定しているため、時間はデフォルトで00:00:00となります。

年月日時分秒のフォーマット

年月日だけでなく、時分秒も含む文字列を変換する場合は、%Y-%m-%d %H:%M:%Sのフォーマットを使用します。

date_string = "2023-10-15 14:30:45"
date_format = "%Y-%m-%d %H:%M:%S"
date_object = datetime.datetime.strptime(date_string, date_format)
print(date_object)
2023-10-15 14:30:45

この例では、年月日と時分秒を含む文字列を正確にdatetimeオブジェクトに変換しています。

タイムゾーンを含むフォーマット

タイムゾーンを含む文字列を変換する場合は、%zを使用してタイムゾーン情報を指定します。

date_string = "2023-10-15 14:30:45 +0900"
date_format = "%Y-%m-%d %H:%M:%S %z"
date_object = datetime.datetime.strptime(date_string, date_format)
print(date_object)
2023-10-15 14:30:45+09:00

この例では、タイムゾーン+0900を含む文字列をdatetimeオブジェクトに変換しています。

ISO 8601形式の変換

ISO 8601形式の日付文字列は、標準的なフォーマットで広く使用されています。

この形式を変換するには、fromisoformatメソッドを使用します。

date_string = "2023-10-15T14:30:45"
date_object = datetime.datetime.fromisoformat(date_string)
print(date_object)
2023-10-15 14:30:45

この例では、ISO 8601形式の文字列をdatetimeオブジェクトに変換しています。

Tは日付と時間の区切りとして使用されます。

応用例

文字列をdatetimeオブジェクトに変換することで、さまざまな日付操作が可能になります。

ここでは、日付の計算や比較、フォーマット変更、データのソートといった応用例を紹介します。

日付の計算と操作

datetimeオブジェクトを使用すると、日付の加算や減算が簡単に行えます。

timedeltaを使用して、日付を操作することができます。

import datetime
# 現在の日付を取得
current_date = datetime.datetime.now()
# 10日後の日付を計算
future_date = current_date + datetime.timedelta(days=10)
print(f"10日後の日付: {future_date}")
# 5日前の日付を計算
past_date = current_date - datetime.timedelta(days=5)
print(f"5日前の日付: {past_date}")
10日後の日付: 2024-08-20 00:13:23.648125
5日前の日付: 2024-08-05 00:13:23.648125

この例では、現在の日付から10日後と5日前の日付を計算しています。

日付の比較

datetimeオブジェクトは、比較演算子を使用して簡単に比較することができます。

import datetime
date1 = datetime.datetime(2024, 8, 15)
date2 = datetime.datetime(2024, 8, 20)
if date1 < date2:
    print("date1はdate2より前の日付です。")
else:
    print("date1はdate2と同じか後の日付です。")
date1はdate2より前の日付です。

この例では、date1date2を比較し、date1date2より前の日付であることを確認しています。

日付のフォーマット変更

datetimeオブジェクトを異なるフォーマットの文字列に変換するには、strftimeメソッドを使用します。

from datetime import datetime

date_object = datetime.datetime(2023, 10, 15, 14, 30, 45)
# フォーマットを変更して文字列に変換
formatted_date = date_object.strftime("%Y/%m/%d %H:%M:%S")
# print(f"フォーマット変更後の日付: {formatted_date}")
フォーマット変更後の日付: 2023/10/15 14:30:45

この例では、datetimeオブジェクトを"%Y/%m/%d %H:%M:%S"のフォーマットで文字列に変換しています。

日付をキーとしたデータのソート

日付をキーとしてデータをソートすることも可能です。

リスト内の辞書を日付でソートする例を示します。

import datetime

data = [
    {"name": "Alice", "date": "2023-10-15"},
    {"name": "Bob", "date": "2023-10-10"},
    {"name": "Charlie", "date": "2023-10-20"}
]
# 日付をdatetimeオブジェクトに変換してソート
sorted_data = sorted(data, key=lambda x: datetime.datetime.strptime(x["date"], "%Y-%m-%d"))
print("日付でソートされたデータ:")
for item in sorted_data:
    print(item)
日付でソートされたデータ:
{'name': 'Bob', 'date': '2023-10-10'}
{'name': 'Alice', 'date': '2023-10-15'}
{'name': 'Charlie', 'date': '2023-10-20'}

この例では、リスト内の辞書を日付でソートし、結果を表示しています。

よくある質問

strptimeとstrftimeの違いは何ですか?

strptimestrftimeは、どちらもdatetimeモジュールで使用されるメソッドですが、目的が異なります。

  • strptime: 文字列をdatetimeオブジェクトに変換するためのメソッドです。

文字列とそのフォーマットを指定して、datetimeオブジェクトを生成します。

  • 例:datetime.datetime.strptime("2023-10-15", "%Y-%m-%d")
  • strftime: datetimeオブジェクトを文字列に変換するためのメソッドです。

datetimeオブジェクトを指定したフォーマットの文字列に変換します。

  • 例:datetime_object.strftime("%Y/%m/%d")

変換できない文字列がある場合はどうすればいいですか?

変換できない文字列がある場合、strptimeメソッドValueErrorを発生させます。

このエラーを処理するためには、例外処理を実装することが重要です。

tryブロックで変換を試み、exceptブロックでエラーをキャッチして適切な処理を行います。

try:
    date_object = datetime.datetime.strptime("invalid-date", "%Y-%m-%d")
except ValueError as e:
    print(f"日付の変換に失敗しました: {e}")

タイムゾーンを考慮した変換はどう行いますか?

タイムゾーンを考慮した変換を行うには、%zフォーマット指定子を使用してタイムゾーン情報を含む文字列を変換します。

また、pytzライブラリを使用して、タイムゾーンを明示的に指定することもできます。

import pytz
date_string = "2023-10-15 14:30:45 +0900"
date_format = "%Y-%m-%d %H:%M:%S %z"
date_object = datetime.datetime.strptime(date_string, date_format)
# タイムゾーンを指定
tokyo_tz = pytz.timezone('Asia/Tokyo')
date_object = date_object.astimezone(tokyo_tz)
print(date_object)

まとめ

Pythonのdatetimeモジュールを使用することで、文字列を日付オブジェクトに変換し、さまざまな日付操作が可能になります。

この記事では、基本的な変換方法から応用例までを解説しました。

これを機に、日付データの操作をより効率的に行い、プログラムの精度を向上させてみてください。

  • URLをコピーしました!
目次から探す