Python入門|文字列の日付をdatetime型に変換する

  • 公開日:2018/06/29
  • 更新日:2019/01/29
  • 投稿者:n bit

スクレイピングにより取得したデータやCSVから取得するデータは多くの場合文字列になっています。文字列の日付形式ではPythonでの分析作業などで日付データとして正しく扱うことができませんので、str型(文字列)の日付をdatetime型に変換する方法解説します。

  • Python

この記事は約 分で読めます。(文字)

文字列の日付をdatetime型に変換する

文字列の日付をdatetime型に変換するにはstrptimeメソッドを利用します。

strptimeメソッド

strptimeメソッドとは、文字列データから書式化コードに当てはまる部分を抽出しdatetime型に変換する関数です。書式化コードは、「どの文字列部分」がdatetime型の年や月、日等の「どの部分を表している文字列」かを指定するための記号です。

例えば、下記のような日時を表した文字列に対して

  • 2018/06/25

下記のような書式化コードで指定することができます。

  • %Y/%m/%d

見比べてみるとなんとなくわかると思いますが、『%Y』は年、『%m』は月、『%d』は日を指定しています。

書式化コードの指定とは関係ない文字列部分に関してはそのまま書式化コードの間に記述しておけば大丈夫です。今回の事例であれば『/』の部分がそうですね。

もし日時の文字列が下記のような場合であれば

  • 2018-06-25

書式化コードの指定は下記のように変わります。

  • %Y-%m-%d

『/』の部分が『-』に変わっているだけです。このように書式化コードに関係のない部分は下の文字列と同じように表記しておけば大丈夫です。

日付の表示のされ方には様々な形式がありますが、書式化コードには多くの種類があり、これらを組み合わせて利用することでほぼ全ての日付形式の表示に対応することが可能です。

Pythonのstrptimeメソッドでサポートされるフォーマット記号

期間書式化コード説明取得例
%Y年を4桁で表示したものを取得します。'1999'
%y年を2桁で表示したものを取得します。'99'
%m月を2桁のゼロ詰めで表示したものを取得します。'01' から '12'
%B月を長いテキスト形式で表示したものを取得します。'January'
%b月を3文字のテキスト形式で表示したものを取得します。'Jan'
%U年の中の週を2桁のゼロ詰めで表示したものを取得します。(週は日曜日から開始)'00' から '53'
%W年の中の週を2桁のゼロ詰めで表示したものを取得します。(週は月曜日から開始)'00' から '53'
曜日%w曜日を数値で表示したものを取得します。'0' (Sunday) to '6' (Saturday)
曜日%A曜日を長いテキスト形式で表示したものを取得します。'Friday'
曜日%a曜日を3文字のテキスト形式で表示したものを取得します。'Fri'
%j年の中の日を表示したものを取得します。0 から 365(366)
%d日を2桁のゼロ詰めで表示したものを取得します。'01' から '31'
日時%cロケールの日時を適切な形式で表示したものを取得します。'Tue Aug 16 21:30:00 1988'
日時%xロケールの日付を適切な形式で表示したものを取得します。'08/16/1988'
日時%Xロケールの時間を適切な形式で表示したものを取得します。'21:30:00'
午前、午後%p'AM' または 'PM'を表示したものを取得します。'AM'
%H24時間表記の時をゼロ詰めで表示したものを取得します。'00' から '23'
%I12時間表記の時をゼロ詰めで表示したものを取得します。'01' から '12'
%M分を2桁のゼロ詰めで表示したものを取得します。'00' から '59'
%S秒を2桁のゼロ詰めで表示したものを取得します。'00' から '59'
マイクロ秒%fマイクロ秒をゼロ詰めで表示したものを取得します。'000000' から '999999'
タイムゾーン%zUTCオフセットを +HHMM もしくは -HHMM の形式で表示したものを取得します。(オブジェクトがnaiveであれば空文字列)'+0000' , '-0400' , '+1030'
タイムゾーン%Zタイムゾーンを表示したものを取得します。(オブジェクトがnaiveであれば空文字列)'UTC' , 'JST'
文字%%文字 '%' を表示したものを取得します。'%'

strptimeメソッドの記述方法

strptimeメソッドは、datetimeモジュール内にありますので最初にdatetimeモジュールをインポートしておきましょう。

from datetime import datetime as dt

strptimeメソッドの引数にdatetime型に変換する文字列と、その文字列に合わせた書式化コードを指定します。

dt.strptime('datetime型に変換する文字列', '書式化コード')

『2018/06/25 10:30:00』をdatetime型に変換するなら下記のように書けば良いですね。

from datetime import datetime as dt


date_value = dt.strptime('2018/06/25 10:30:00', '%Y/%m/%d %H:%M:%S')
print(date_value)

出力結果

2018-06-25 10:30:00

最初のうちはどの書式化コードをあてはめれば良いのか迷ってしまいますが、上記の一覧表を確認しながら1つずつ当てはめていけばそのうち慣れてきます。

strptimeメソッドと書式化コードを使った変換事例

いくつか実際に文字列の日付をdatetime型に置き換える事例を紹介します。

AM、PM記号が付いた文字列の日付をdatetime型に変換

AM、PM記号がついた文字列の日付をdatetime型に変換する場合は書式化コードの『%p』を使うことで変換することができます。注意するポイントは時間が12時間表記になっていますので『%H』ではなく『%I』を利用するようにしましょう。

from datetime import datetime as dt


date_value = dt.strptime('26/06/2018 2:20:00 PM', '%d/%m/%Y %I:%M:%S %p')
print(date_value)

出力結果

2018-06-26 14:20:00

12時間表記だった時間「2:20:00」が、24時間表記の「14:20:00」に変換されていることが確認できます。

特殊な記号(T記号)が付いた文字列の日付をdatetime型に変換

あまり見慣れない特殊な記号が付いている文字列の日付をたまに見かけることがありますが、その場合でも特に心配する必要はありません。通常の間に入るただの文字列として扱えば良いだけです。

今回の事例であれば特殊記号『T』をそのまま『T』と入力しておけばOKです。

from datetime import datetime as dt


date_value = dt.strptime('2018-06-27T11:28:54', '%Y-%m-%dT%H:%M:%S')
print(date_value)

出力結果

2018-06-27 11:28:54

今日のdot

文字列の日付をdatetime型に変換するにはdatetimeモジュール内のstrptimeメソッドを利用します。利用するためには最初にdatetimeモジュールをインポートしてstrptimeメソッドの引数に変換対象となる文字列の日付データと書式化コードを指定します。

from datetime import datetime as dt


date_value = dt.strptime('26/06/2018 2:20:00 PM', '%d/%m/%Y %I:%M:%S %p')
print(date_value)

出力結果

2018-06-26 14:20:00

▲ ページの先頭へ戻る

このページの目次

目次