導入
Python の datetime モジュールと time モジュールには、どちらも文字列をオブジェクトに変換するための strptime() クラス メソッドが含まれています。.
この記事では、strptime() を使用して文字列を datetime オブジェクトと struct_time() に変換します。.
datetime.strptime() を使用して文字列を datetime オブジェクトに変換する
datetime.strptime() メソッドの構文は次のとおりです。
datetime.strptime(date_string, format)
datetime.strptime() メソッドは、format で解析された date_string に対応する datetime オブジェクトを返します。両方の引数は必須であり、文字列でなければなりません。.
datetime.strptime() で使用されるフォーマット コマンドの詳細については、Python ドキュメントの strftime() および strptime() フォーマット コードを参照してください。.
文字列をdatetime.datetime()オブジェクトに変換する例
次の例では、datetime 文字列を datetime.datetime() オブジェクトに変換し、結果のオブジェクトのクラス名と値を出力します。
from datetime import datetime
datetime_str = '09/19/22 13:55:26'
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
print(type(datetime_object))
print(datetime_object) # printed in default format出力は次のようになります。
<class 'datetime.datetime'>
2022-09-19 13:55:26文字列をdatetime.date()オブジェクトに変換する例
次の例では、日付文字列を datetime.date() オブジェクトに変換し、結果のオブジェクトのクラス タイプと値を出力します。
from datetime import datetime
date_str = '09-19-2022'
date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object) # printed in default format出力は次のようになります。
<class 'datetime.date'>
2022-09-19文字列をdatetime.time()オブジェクトに変換する例
次の例では、時刻文字列を datetime.time() オブジェクトに変換し、結果のオブジェクトのクラス タイプと値を出力します。
from datetime import datetime
time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)出力は次のようになります。
<class 'datetime.time'>
13:55:26ローカルの例を使用して文字列を datetime.datetime() に変換する
次の例では、ドイツのローカル日付文字列を datetime.datetime() オブジェクトに変換し、結果のオブジェクトのクラス タイプと値を出力します。
from datetime import datetime
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag' # de_DE locale
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)出力は次のようになります。
<class 'datetime.datetime'>
2022-12-16 00:00:00datetime.datetime() オブジェクトには曜日が小数としてのみ含まれるため、結果のオブジェクトには入力文字列の曜日名が含まれていないことに注意してください。.
time.strptime() を使用して文字列を struct_time() オブジェクトに変換する
time.strptime() メソッドの構文は次のとおりです。
time.strptime(time_string[, format])
time.strptime() メソッドは、指定されたフォーマットで解析された time_string に対応する time.struct_time() オブジェクトを返します。time_string は必須であり、両方の引数は文字列でなければなりません。フォーマットが指定されていない場合、デフォルトは次のようになります。
'%a %b %d %H:%M:%S %Y'
これは、ctime() 関数によって返される形式と一致します。.
time.strptime() と time.strftime() のフォーマット コマンドは同じです。.
提供されている例のフォーマットを使用して文字列をstruct_time()オブジェクトに変換します。
次の例では、format 引数を指定して時間文字列を time.struct_time() オブジェクトに変換し、結果のオブジェクトの値を出力します。
import time
time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)出力は次のようになります。
A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)出力に示されているように、文字列を time.struct_time() オブジェクトに変換すると、strptime() メソッドは、format 引数で定義されていないフォーマット指示に対してプレースホルダー値を使用します。.
デフォルトの形式を使用して文字列を struct_time() オブジェクトに変換する
時間文字列を time.struct_time() オブジェクトに変換するときにフォーマット引数を指定しないと、デフォルトのフォーマットが使用され、入力文字列がデフォルトのフォーマットと完全に一致しない場合はエラーが発生します。
'%a %b %d %H:%M:%S %Y'
次の例では、時間文字列をフォーマット引数なしで time.struct_time() オブジェクトに変換し、結果のオブジェクトの値を出力します。
import time
# default format - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)出力は次のようになります。
A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)出力に示されているように、文字列を time.struct_time() オブジェクトに変換すると、strptime() メソッドは、フォーマット引数で定義されていないフォーマット指示に対して、またはフォーマットが指定されていない場合はデフォルトで、プレースホルダー値を使用します。.
strptime() エラーのトラブルシューティング。.
入力文字列がstrptime()で指定された形式で解析できない場合、ValueErrorが送出されます。解析エラーをテストするにはtryブロックを使用し、結果を出力するためにelseブロックを使用できます。strptime()メソッドの使用時に表示されるValueErrorメッセージは、解析エラーの主な原因を明確に示しています。次の例は、余分なデータや形式の不一致など、よくあるエラーを示しています。
from datetime import datetime
import time
datetime_str = '09/19/18 13:55:26'
try:
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
print('ValueError 1:', ve1)
time_str = '99::55::26'
try:
time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
print('ValueError 2:', ve2)出力は次のようになります。
ValueError 1: unconverted data remains: 13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'結果
このチュートリアルでは、Python を使用して日付と時刻の文字列を日付と時刻のオブジェクトに変換しました。.









