【Python】月が英語形式の日付情報を数値に変換する方法(strptime、strftime)

時計 2021.03.06 / 時計

【Python】月が英語形式の日付情報を数値に変換する方法(strptime、strftime)

本記事ではPythonによる、月が英語形式の日付情報を数値に変換する方法について解説していきます。

英語形式で記載されている日付情報で何かしらの操作をしたい場合、困ることが多々あります。
そういった文字列に対してなにかしら操作を行いたい場合は、まず英語形式の文字列を数値に変換することから始めます。

本記事では、strptime()関数とstrftime()メソッドを使った方法を詳しく解説しています。

本記事を通して以下の知識を学べます。

学べる知識
  • 英語形式の日付情報を数値に変換する方法
  • strptime()関数の使用方法
  • strftime()メソッドの使用方法
  • 書式指定について

月が英語形式の日付情報を数値に変換する方法

次のような日付情報を例にとります。

22 Feb 09:00 (Mon)

このような月が英語で記載されている形式の日付情報を、次のような形式に変更したい場合はどうすればよいのか。

2021-2-22 09:00

答えを言うと、strptime()関数でdatetimeオブジェクトに変換し、そのdatetimeオブジェクトに対してstrftime()メソッドを使用することで、希望する日付形式に変換することができます。

Pythonでは次のように記載します。

import datetime
timestamp = "22 Feb 09:00 (Mon)"
timestamp = datetime.datetime.strptime(str(timestamp), '%d %b %H:%M (%a)').strftime('2021-%m-%d %H:%M')

この方法を使うために必要な知識は以下の3つです。

  • datetimeモジュールとdatetimeオブジェクトについて
  • strptime()関数による文字列をdatetimeオブジェクトへの変換
  • strftime()メソッドによるdatetimeオブジェクトを文字列への変換

すでに本記事の答えはお伝えしましたが、そのために必要な上記の知識について以下で詳しく解説していきます。

datetimeモジュールとdatetimeオブジェクトについて

datetimeモジュールとは

datetimeモジュールは、日付や時刻の様々な操作を行うためのモジュールです。
日付の取得や、日付の計算、日付形式の変更などができます。

datetimeモジュールには独自で使用している様々なデータ型が存在します。

データ型 説明
date 日付情報 属性はyear、month、day
time 時刻情報 属性はhour、minute、secondなど
datetime 日付と時刻情報
timedelta date、timeおよびdatetimeでの時間差(期間)

本記事ではこれらデータ型のうちdatetimeを使用します。

datetimeオブジェクト

データ型の1つdatetimeは時間軸上のある瞬間を表すデータ型です。

datetime.datetime.now()により、現在の日付と時刻を格納したdatetimeオブジェクトを取得できます。

import datetime

dt = datetime.datetime.now()
print(dt)
# 2021-02-28 23:52:17.113141

datetime.datetime()関数においても、引数に日付情報を指定することで、その瞬間のdatetimeオブジェクトを取得できます。

import datetime

dt = datetime.datetime(2021, 5, 4, 5, 54, 54)
print(dt)
# 2021-05-04 05:54:54

datetimeオブジェクトには年、月、日、時、分、秒、マイクロ秒の値が格納されています。
その属性を指定することで、datetimeオブジェクトから各値を取得することができます。

import datetime

dt = datetime.datetime(2021, 5, 4, 5, 54, 54)

print(dt.year)
print(dt.minute)
# 2021
# 54

datetimeオブジェクトには専用のメソッドが用意されています。
それらを使用して、日付の形式変更などができます。

つまり形式変更するためには文字列をdatetimeオブジェクトにする必要があるということです。

それでは次に、文字列をdatetimeオブジェクトにする方法について解説します。

文字列をdatetimeオブジェクトへの変換(strptime()関数)

文字列の日付情報をdatetimeオブジェクトに変換するにはdatetime.datetimeのstrptime()関数を使用します。
strptimeのstrはString(文字)、pはParse(構文解析)を意味しています。

strptime()関数には2つ引数を指定する必要があります。

  • 第一引数:日付情報の文字列
  • 第二引数:第一引数の文字列に対応する書式を指定

以下に例を示します。

datetime.datetime.strptime('22 Feb 09:00 (Mon)', '%d %b %H:%M (%a)')

これにより渡された日付情報の文字列はdatetimeオブジェクトに変換されました。
第二引数の書式が第一引数の文字列とマッチしない場合、ValueError例外が発生します。

datetimeオブジェクトを文字列への変換(strftime()メソッド)

datetimeオブジェクトを文字列に変換するにはstrftime()メソッドを使用します。
strftimeのstrはString(文字)、fはFormat(整形)を意味しています。

strftime()メソッドの引数には、書式指定を含んだ文字列を指定します。

datetime.strftime(書式文字列)

引数に指定した文字列の形で、strftime()メソッドは文字列を返します。

以下では、strptime()関数で文字列をdatetimeオブジェクトに変換したデータを、strftime()メソッドで希望する形に整形しています。

import datetime

timestamp = datetime.datetime.strptime('22 Feb 09:00 (Mon)', '%d %b %H:%M (%a)')
timestamp_format = timestamp.strftime('2021-%m-%d %H:%M')
print(timestamp_format)

書式指定一覧

strptime()関数とstrftime()メソッドで使用する書式指定の一覧を以下に記します。

書式 意味
%Y 西暦(4桁) 例:2021
%y 西暦(下2桁) 例:21
%m 月(01~12)
%B 英語での月 例:December
%b 英語での月(省略形) 例:Dec
%d 日(01~31)
%w 曜日(0~6)
%A 英語での曜日 例:Sunday
%a 英語での曜日(省略形) 例:Sun
%H 時(24時間)
%I 時(12時間)
%M 分(00~59)
%S 秒(00~59)
%p AM、PM

まとめ

本記事「月が英語形式の日付情報を数値に変換する方法(strptime、strftime)」はいかがでしたか。

プログラムの中で日付情報を扱うことは非常に多いです。

意外に難しい日付情報の操作ですが、本サイトを通してうまく扱えるようになってください。