Python - 文字列をdatetime型にする

文字列(string)をdatetime型に変換するには、datetimeのstrptimeメソッドを使用します。

文字列を datetime型にする方法

strptimeメソッドの引数に文字列の日時と、フォーマットを渡します。
import datetime

datetime値 = datetime.datetime.strptime('文字列の日時', 'フォーマット')

文字列'2099年1月31日 21時13分24秒' を datetimeにするサンプルコード

import datetime

# '2099年1月31日 21時13分24秒'をdatetimeに
strDateValue = '2099年1月31日 21時13分24秒'
dateValue = datetime.datetime.strptime(strDateValue, '%Y年%m月%d日 %H時%M分%S秒')
フォーマットで使用できる文字
ディレクティブ 意味
%d 日にち 01, 02, ..., 31
%m 01, 02, ..., 12
%y 2桁の西暦 00, 01, ..., 99
%Y 4桁の西暦 0001, 0002, ..., 9999
%H 時 (24時間表記) 00, 01, ..., 23
%M 00, 01, ..., 59
%S 00, 01, ..., 59
%f 0埋めした6桁のマイクロ秒 000000, 000001, ..., 999999
%z UTCオフセット (空文字列), +0000, -0400, +1030, +063415, -030712.345216
%Z タイムゾーンの名前 (空文字列), UTC, GMT
%% 文字 '%' %
次のフォーマットはロケール設定で受け付ける文字列が変わるため、注意してください
ディレクティブ 意味
%b 月名の短縮形 Jan, Feb, ..., Dec(en_USの場合)
%B 月名 January, February, ..., December(en_USの場合)
%I 時 (12時間表記) 01, 02, ..., 12
%p ロケール設定のAM,またはPMと同じ文字列 AM, PM(en_USの場合)
その他の書式はPython公式ドキュメントを参照してください。

0埋めと0埋め無し

月(%m)、日(%d)、時(%H)、分(%M)、秒(%S)は 0埋めと0埋め無し、どちらも正しく認識します。 マイクロ秒(%f)は '1' と '000001' を指定したときに結果が異なり、'1' のときは '100000' として認識されるので注意してください。
import datetime

# 結果 = 2099-01-02 01:02:03.400000
dateValue = datetime.datetime.strptime('2099/1/2 1:2:3 4', '%Y/%m/%d %H:%M:%S %f')

# 結果 = 2099-01-02 01:02:03.000004
dateValue = datetime.datetime.strptime('2099/01/02 01:02:03 000004', '%Y/%m/%d %H:%M:%S %f')

2桁の年(%y)

テストした環境では '68/01/01' は 2068年、'68/01/01' は 1969年 と認識されました。システム年などの要素で変動する可能性があるため、使用するときは注意してください。
import datetime

# 結果 = 2001-01-01 00:00:00
dateValue = datetime.datetime.strptime('01/01/01', '%y/%m/%d')

# 結果 = 2068-01-01 00:00:00
dateValue = datetime.datetime.strptime('68/01/01', '%y/%m/%d')

# 結果 = 1969-01-01 00:00:00
dateValue = datetime.datetime.strptime('69/01/01', '%y/%m/%d')

# 結果 = 1999-01-01 00:00:00
dateValue = datetime.datetime.strptime('99/01/01', '%y/%m/%d')
サンプルコードの実行結果
サンプルコードの実行結果

参考資料

検証環境