Pythonで日付を解析する方法を完全ガイド!初心者でもわかるstrptime()の使い方
生徒
「Pythonで文字として書かれた日付を、本当の日付データに変換する方法ってありますか?」
先生
「Pythonでは、datetimeモジュールのstrptime()を使えば、文字列の日付を簡単に日付データに変換できますよ。」
生徒
「どんなときに使うんですか?」
先生
「例えば、ウェブサイトのフォームに入力された日付や、CSVファイルに書かれた文字形式の日時をプログラムとして扱いたいときに使います。それでは基本から見ていきましょう。」
1. strptime()とは?
strptime()は、Pythonのdatetimeモジュールが持っている機能で、文字列(ストリング)で表現された日付を、プログラムで扱える日付データに変換するための仕組みです。
日付データに変換すると、あとで計算したり比較したりできるようになります。初心者の方には少し聞き慣れない言葉かもしれませんが、「文字のままの日付を、本物の日付として使える形に変える道具」と考えると理解しやすくなります。
例えば「2024-05-01」という文字列があったとします。これは人間には日付に見えますが、Pythonからするとただの文字列です。そこでstrptime()を使うと、この文字列を年や月や日として認識し、日付型のオブジェクトに変換できるようになります。
2. strptime() の基本的な使い方
strptime()は次のように使います。最初の引数には変換したい日付文字列を入れ、二つ目の引数にはその文字列がどんな書き方(フォーマット)になっているかを指定します。
from datetime import datetime
text = "2024-05-01"
dt = datetime.strptime(text, "%Y-%m-%d")
print(dt)
実行すると次のようになります。
2024-05-01 00:00:00
このように、ただの文字だった日付が日付データとして扱えるようになります。%Yは年、%mは月、%dは日を表す記号で、これを「フォーマット指定子」といいます。難しそうに見えますが、覚える種類はそんなに多くありません。
3. strptime()で使う主なフォーマット指定子
日付解析に必要なものは主に次のとおりです。これらを組み合わせて書かれた形式に合わせて変換できます。
%Y… 西暦(4桁)%m… 月(2桁)%d… 日(2桁)%H… 時(24時間)%M… 分%S… 秒
例えば「2024/05/01 14:30:00」という文字列があれば、スラッシュや半角スペースも含めて書かれているとおりの形を指定してあげる必要があります。
from datetime import datetime
text = "2024/05/01 14:30:00"
dt = datetime.strptime(text, "%Y/%m/%d %H:%M:%S")
print(dt)
4. 形式が違うと変換できない理由
strptime()は、指定したフォーマットと文字列の形が一致しないとエラーになります。これは、Pythonが正しい位置に年や月や日を読み取れなくなるためです。人間なら多少の揺れでも読み取れますが、コンピュータは「書かれている形が完全に一致しているか」を厳しくチェックします。
例えば「2024-5-1」という文字列は月や日の桁数が違うため、次のような指定ではエラーになります。
datetime.strptime("2024-5-1", "%Y-%m-%d") # これはエラーになる
こういう場合は文字列側の形式を揃えるか、あるいは事前に桁を補う加工をしてあげる必要があります。現実のシステムでは、ユーザー入力や外部データが必ずしも同じ形式で来るとは限らないので、実務ではとてもよくある問題です。
5. 実例:フォーム入力やCSVの日時を解析する
strptime()がよく使われる場面としては、フォームから受け取った文字列の日時や、CSVファイルに保存された時刻データを扱うときがあります。人が入力した値は書き方がばらばらなことも多く、「YYYY-MM-DD」や「YYYY/MM/DD」など形式を揃えて解析する必要があります。
from datetime import datetime
text = "2024/5/1"
dt = datetime.strptime(text, "%Y/%m/%d")
print(dt)
このように、書かれたとおりの形式を指定して変換します。日付解析はシステムの基盤になる部分なので、安定して扱えるようになると、データ処理やログ解析など幅広い場面で役立つようになります。