Pythonで文字列<->日付・時間(date, datetime)を変換する方法

Pythonのdatetimeと日付を表す文字列の相互の変換方法について解説します。

Pythonで文字列<->日付・時間(date, datetime)を変換する方法

Pythonのdatetimeモジュールは、日付や時刻を扱うためのクラスを定義しています。日付や時刻を計算したり、それらを読みやすいフォーマットに変換するためのメソッドを持っています。

この記事では、datetimeオブジェクトを、日付を表した文字列に変換する方法と、逆に、日付を表した文字列からdatetimeオブジェクトへ変換する方法について解説します。

datetimeに変換はstrptime、文字列に変換はstrftime(急いでいる人向け)

  • 日付を表した文字列からdatetime型への変換は、datetime型のクラスメソッドstrptime()を使う
  • datetime型から日付を表す文字列への変換は、datetime型のメソッドstrftime()を使う
# 日付 <-> 文字列の変換まとめ

import datetime

# 文字列 -> datetime型(strptime)
# 日付・時刻の文字列
date_str = '2023/1/3 9:12:35'

# datetime.datetime(2023, 1, 3, 9, 12, 35) に変換
date_time = datetime.datetime.strptime(date_str, '%Y/%m/%d %H:%M:%S')


# datetime型 -> 文字列(strftime)
date_str_2 = date_time.strftime('%Y年%m月%d日 %H時%M分%S秒')

print(date_str_2)
# 2023年01月03日 09時12分35秒

日付[datetime]から文字列に変換する(strftime)

datetime型のデータを直接printしても、人間には読みづらい形になっています。

# datetime型をprintで表示する

import datetime

# 現在の日時を取得
now = datetime.datetime.now()

print(now)
# 2023-01-03 09:12:35.874979

これはPythonが内部で処理しやすいフォーマットになっているためで、これを読みやすい形に変換するためには、どのような表示にしたいかをフォーマットで指定して、文字列に変換する必要があります。datetime型から文字列に変換するためにはdatetime型のstrftimeメソッドを利用します。

# 日付から文字列に変換する

import datetime

# 現在の日時を取得
now = datetime.datetime.now()

# datetime型を変換するフォーマットを指定
now_str = now.strftime('%Y年%m月%d日 %H時%M分%S秒')

print(now_str)
# 2023年01月03日 09時12分35秒

日付を読み取るフォーマット(%Y%mなど)の書式については、Pythonドキュメントの「strftime() と strptime() の書式コード」にまとまっています。これらの書式は、datetime型が保持している年、月、日などのデータをどのようなフォーマットとして解釈するかを決めるもので、たとえば%Yは4桁の西暦の 10 進表記(0794、2023など)を表すと決まっています。

文字列から日付[datetime, date]に変換する(strptime)

日付の文字列をPythonで処理しやすいようにdatetime型に変換して読み込みたいこともあります。この場合、日付を表す文字列からどの数値をどのデータ(年、月、日など)として読み込むかのフォーマットを指定する必要があります。Pythonの場合、datetime型のクラスメソッドであるstrptime()を利用します。strptime()は、第一引数に読み取りたい日付を表す文字列、第二引数にフォーマットを指定します。

読み取るフォーマットの書き方については、Pythonドキュメントの「strftime() と strptime() の書式コード」にまとまっています。

先ほど文字列に変換したデータを、逆にdatetime型に変換してみましょう。

# 文字列から日付に変換する

import datetime

# 日付を表す文字列
now_str = '2023年01月03日 09時12分35秒'

# 文字列のどの位置の数字をどのデータとして読み込むかを定義する
now_datetime = datetime.datetime.strptime(now_str, '%Y年%m月%d日 %H時%M分%S秒')

# datetime型に変換されている
print(type(now_datetime))
# <class 'datetime.datetime'>

print(now_datetime)
# 2023-01-03 09:12:35

また、datetime型に変換できれば、date型にも簡単に変換できます。date型はdatetime.date(year, month, day)で定義されるので、datetime型からそれぞれのデータを入れてあげましょう。

# datetime型からdate型への変換

# datetime.datetime(2023, 1, 3, 9, 12, 35)からyear, month, dayを取得して入力
now_date = datetime.date(now_datetime.year, now_datetime.month, now_datetime.day)

print(type(now_date))
# <class 'datetime.date'>

print(now_date)
# 2023-01-03