1. ホーム
  2. パイソン

[解決済み] Pythonでミリ秒を含む時間文字列を解析するにはどうすればよいですか?

2022-04-05 17:44:33

質問

日付/時刻を含む文字列のパースには 時間.strptime

>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)

ミリ秒を含む時間文字列をパースするにはどうすればよいですか?

>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
    data_string[found.end():])
ValueError: unconverted data remains: .123

解決方法は?

Python 2.6 で strftime/strptime マクロが追加されました。 %f . ドキュメントではマイクロ秒についてしか触れていないので少し誤解を招きそうですが %f 実際に解析されるのは 任意の での秒単位の小数 まで 6桁で、ミリ秒やセンチ秒、デシ秒にも対応する。

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')

しかし 時間.struct_time は実際にはミリ秒/マイクロ秒を保存しません。そのため datetime というように。

>>> from datetime import datetime
>>> a = datetime.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
>>> a.microsecond
123000

ご覧の通りです。 .123 は正しく解釈され 123 000 マイクロ秒です。