Pythonで文字列をdatetimeオブジェクトに変換する

Pythonで日付や時刻の計算をするにはdatetimeオブジェクトで行うのが楽なので、日付や時刻を表す文字列をdatetimeオブジェクトに変換します。

逆に、datetimeオブジェクトから日付や時刻の文字列に変換する方法もありますが、それは 別の投稿 を参照してください。

目次

  1. 文字列からdatetimeオブジェクトに変換する方法
  2. 変換実施例

文字列からdatetimeオブジェクトに変換する方法

datetimeオブジェクトのstrptimeメソッドは、文字列を指定し書式でdatetimeオブジェクトに変換します。

D = datetime.datetime.strptime(S, f)
変数 内容
S 日付や時刻を示す文字列
f 変換する書式を示す文字列
D datetimeオブジェクト

1つめのdatetimeはモジュールを示すものです。

書式を指定する文字列に使われる主な文字です。

書式 内容
%Y 年(0000~9999)
%y 年(00~99)
%m 月(01~12)
%d 日にち(01~31)
%H 時(00~12)
%M 分(00~59)
%S 秒(00~59)
%f マイクロ秒(000000~999999)

変換実施例

試してみました。

>>> import datetime

>>> D = datetime.datetime.strptime('2018-01-02 03:04:05.678901', '%Y-%m-%d %H:%M:%S.%f')
>>> D
datetime.datetime(2018, 1, 2, 3, 4, 5, 678901)
>>> print(D)
2018-01-02 03:04:05.678901

>>> day = datetime.date.strptime('2018-01-02 03:04:05.678901', '%Y-%m-%d')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.date' has no attribute 'strptime'

>>> time = datetime.time.strptime('2018-01-02 03:04:05.678901', '%H:%M:%S')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.time' has no attribute 'strptime'

datetimeには変換できましたが、dateやtimeにはstrptimeは無いのですね。

文字列と書式が合っていないとエラーが出るようですね。

>>> import datetime

>>> D = datetime.datetime.strptime('2018-01-02 03:04:05.678901', '%Y-%m-%d')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\anaconda3\lib\_strptime.py", line 565, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\anaconda3\lib\_strptime.py", line 365, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains:  03:04:05.678901

広告

Pythonの日付/時刻処理カテゴリの投稿