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