今回は、Pythonのdatetimeモジュールでformatを指定する方法についてご紹介します。
datetimeモジュールの概要
Pythonで日時を扱う際には、標準ライブラリとして用意されているdatetimeモジュールを活用します。
このモジュールには日付や時刻を表すための様々なクラスが用意されており、その中でもdatetimeクラスは日付と時刻の情報を同時に保持できます。
任意の文字列形式に変換するメソッドや、文字列から日時オブジェクトを生成するメソッドがあるため、フォーマットの指定が柔軟に行えます。
strftimeでformatを指定する
strftimeは、datetimeオブジェクトを好きな文字列の形式に変換するためのメソッドです。
よく使われる書式指定子の例としては、%Y(西暦4桁)、%m(月)、%d(日)、%H(24時間表記の時)、%M(分)、%S(秒)などがあります。
主なフォーマット指定子は次の通りです。
- %Y : 西暦の4桁表記(例: 2025)
- %m : 2桁の月(例: 02)
- %d : 2桁の日(例: 15)
- %H : 24時間表記の時(例: 14)
- %I : 12時間表記の時(例: 02)
- %M : 分(例: 30)
- %S : 秒(例: 05)
- %f : マイクロ秒(例: 123456)
- %a : 曜日の略称(例: Mon)
- %A : 曜日の完全名称(例: Monday)
- %b : 月の略称(例: Feb)
- %B : 月の完全名称(例: February)
- %p : AM/PM表示(例: AM)
- %j : 年初からの日数(例: 046)
- %U : 年内の週番号(週の始まりが日曜日の場合)
- %W : 年内の週番号(週の始まりが月曜日の場合)
- %z : タイムゾーンのオフセット(例: +0900)
- %Z : タイムゾーン名(例: JST)
これらの指定子を組み合わせることで、自由にフォーマットをカスタマイズできます。
以下は、現在の日時を取得し、指定したフォーマットで文字列に変換する例です。
1 2 3 4 5 |
from datetime import datetime now = datetime.now() formatted = now.strftime("%Y-%m-%d %H:%M:%S") print(formatted) |
2025-02-15 14:32:07
このようにstrftimeを使用すると、任意の日時要素を文字列として容易に生成できます。
strptimeで文字列をdatetimeに変換する
strptimeは、文字列に含まれる日時情報を、指定したフォーマットに基づいてdatetimeオブジェクトに変換するためのメソッドです。
利用する際は、入力文字列とフォーマット文字列が一致している必要があります。
以下は、”2025-02-15 14:32:07″という文字列をdatetimeオブジェクトに変換する例です。
1 2 3 4 5 |
from datetime import datetime date_str = "2025-02-15 14:32:07" dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S") print(dt_obj) |
2025-02-15 14:32:07
フォーマット指定子と入力文字列の形式が合致しない場合はValueErrorが発生します。
よくあるエラーと注意点
よくあるエラーとして、strptimeで指定するフォーマットと実際の文字列形式が異なる例が挙げられます。
例えば、フォーマット内の%m(月)を%M(分)と誤って記述してしまうと、正しく解析できずエラーが発生します。
また、曜日や月名を含むフォーマットを使う場合は、実行環境のロケール設定によって出力やパースの挙動が変わることがあります。
タイムゾーンを考慮する必要がある場合は、pytzやzoneinfoなどのモジュールでタイムゾーン情報を付与する対応を行うと良いでしょう。
加えて、Pythonのバージョンごとにサポートされる指定子が異なるケースもあるため、公式ドキュメントの確認が大切です。
まとめ
datetimeのformat指定は、strftimeで文字列に変換、strptimeで文字列からdatetimeを生成するのが基本です。
指定子を正しく組み合わせることで、柔軟な日時表現が可能になります。
よくあるエラーやロケールの違いにも注意すると、スムーズに日時を扱えます。