Pythonのstrptime()をマスター:文字列から正確に日付をパースする
Python strptime():文字列をdatetimeオブジェクトに変換する
このガイドでは、Pythonのdatetime.strptime()メソッドを使用して文字列からdatetimeオブジェクトを作成する方法を、実践的な例と包括的なフォーマットコードリファレンスとともに解説します。
動画:Pythonにおける日付と時刻
公式のPythonチュートリアルを見て、datetime処理の理解を深めましょう。
strptime()メソッドは、指定されたフォーマットに従う文字列からdatetimeオブジェクトを作成します。
注意: すべての文字列がパースできるわけではありません。入力はフォーマットコードと完全に一致する必要があります。
例1:シンプルな日付文字列の変換
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("date_stringの型 =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("date_objectの型 =", type(date_object))
プログラムを実行すると、出力は以下のようになります:
date_string = 21 June, 2018 date_stringの型 = <class 'str'> date_object = 2018-06-21 00:00:00 date_objectの型 = <class 'datetime.datetime'>
strptime()の仕組み
strptime()クラスメソッドは2つの引数を受け取ります:
- パース対象の文字列
- 文字列のレイアウトを記述するフォーマットコード
これらの入力に基づいて、メソッドは同じ瞬間を表すdatetimeオブジェクトを返します。
上記の例では、フォーマットコード%d %B, %Yは以下を意味します:
%d– ゼロ埋めされた月の日付(01-31)%B– 完全な月名(January-December)%Y– 4桁の年
例2:曖昧な日付のパース
from datetime import datetime
dt_string = "12/11/2018 09:15:32" # 日/月/年形式と仮定
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# 月/日/年形式と仮定
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)
プログラムの出力:
dt_object1 = 2018-11-12 09:15:32 dt_object2 = 2018-12-11 09:15:32
フォーマットコード完全一覧
以下の表は、strptime()で使用できるすべてのディレクティブをまとめたものです。詳細については、Python公式のdatetimeモジュールドキュメントを参照してください。
| ディレクティブ | 意味 | 例 |
|---|---|---|
%a | 省略された曜日名 | Sun, Mon, ... |
%A | 完全な曜日名 | Sunday, Monday, ... |
%w | 曜日を10進数で表す | 0, 1, ..., 6 |
%d | 月の日付(ゼロ埋め) | 01, 02, ..., 31 |
%-d | 月の日付(埋めなし) | 1, 2, ..., 30 |
%b | 省略された月名 | Jan, Feb, ..., Dec |
%B | 完全な月名 | January, February, ... |
%m | 月番号(ゼロ埋め) | 01, 02, ..., 12 |
%-m | 月番号(埋めなし) | 1, 2, ..., 12 |
%y | 世紀なしの年(ゼロ埋め) | 00, 01, ..., 99 |
%-y | 世紀なしの年(埋めなし) | 0, 1, ..., 99 |
%Y | 世紀付きの年 | 2013, 2019, ... |
%H | 時(24時間制、ゼロ埋め) | 00, 01, ..., 23 |
%-H | 時(24時間制、埋めなし) | 0, 1, ..., 23 |
%I | 時(12時間制、ゼロ埋め) | 01, 02, ..., 12 |
%-I | 時(12時間制、埋めなし) | 1, 2, ..., 12 |
%p | ロケールのAMまたはPM | AM, PM |
%M | 分(ゼロ埋め) | 00, 01, ..., 59 |
%-M | 分(埋めなし) | 0, 1, ..., 59 |
%S | 秒(ゼロ埋め) | 00, 01, ..., 59 |
%-S | 秒(埋めなし) | 0, 1, ..., 59 |
%f | マイクロ秒(ゼロ埋め) | 000000 - 999999 |
%z | UTCオフセット(+HHMMまたは-HHMM) | |
%Z | タイムゾーン名 | |
%j | 年間通算日(ゼロ埋め) | 001, 002, ..., 366 |
%-j | 年間通算日(埋めなし) | 1, 2, ..., 366 |
%U | 週番号(日曜日を週の初めとする) | 00, 01, ..., 53 |
%W | 週番号(月曜日を週の初めとする) | 00, 01, ..., 53 |
%c | ロケールの日付と時刻 | Mon Sep 30 07:06:05 2013 |
%x | ロケールの日付 | 09/30/13 |
%X | ロケールの時刻 | 07:06:05 |
%% | リテラルのパーセント記号 | % |
よくあるエラー:ValueError
文字列とフォーマットコードが一致しない場合、strptime()はValueErrorを発生させます。例:
from datetime import datetime
date_string = "12/11/2018" # 不正な形式 - 日 月 年を期待
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
このコードを実行すると:
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
推奨リーディング: Python strftime()
Python
- Python キーワードと識別子: 予約語と命名規則をマスター
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python正規表現(reモジュール)実践ガイド
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Pythonのtimeモジュールをマスター:関数、構造体、実践例