Python: タイムスタンプ・datetime型・文字列型の相互変換
Pythonで日時の情報を使う場合、 日時データをどのデータ型で扱うかは次の3つの選択肢があります。
- datetime型
- タイムスタンプ(数値型)
- 文字列型
そして、必要に応じてこれらのデータ型を変換する場合があります。 例えばファイルのタイムスタンプを取得してdatetime型に変換したり、 datetime型を整形して文字列型として変換して表示することもあります。
そこでこの記事では、日時を扱える3つのデータ型の相互変換の方法を紹介します。
まずは「datetime・タイムスタンプ」の相互変換、
次に「datetime・文字列」、
最後に「タイムスタンプ・文字列」の順番で説明します。
datetime型 ⇒ タイムスタンプ
datetime型の日時データをタイムスタンプに変換する場合、 datetimeモジュールのdatetimeオブジェクトのtimestamp()メソッドを使います。
import datetime dt = datetime.datetime.now() print("-- datetime型 --") print(dt) print(type(dt)) # datetime型 → タイムスタンプ ts = datetime.datetime.timestamp(dt) print("-- タイムスタンプ --") print(ts) print(type(ts))
-- datetime型 -- 2022-05-27 04:47:50.432135 <class 'datetime.datetime'> -- タイムスタンプ -- 1653594470.432135 <class 'float'> 1653594470.432135
タイムスタンプ ⇒ datetime型
タイムスタンプをdatetime型に変換する場合、 datetimeオブジェクトのfromtimestamp()メソッドを利用します。
import datetime # タイムスタンプ ts = 1653594470 print("-- タイムスタンプ --") print(ts) print(type(ts)) # タイムスタンプ → datetime型 dt = datetime.datetime.fromtimestamp(ts) print("-- datetime型 --") print(dt) print(type(dt))
-- タイムスタンプ -- 1653594470 <class 'int'> -- datetime型 -- 2022-05-27 04:47:50 <class 'datetime.datetime'>
datetime型 ⇒ 文字列型
datetime型を文字列型に変換する場合、
strftime()メソッドを使います。
strftime()はインスタンスメソッドなので、
下のサンプルコードのように
「dt.strftime("日時書式")」と記述します。
「%Y,%m,%d」などの日時書式の詳細については以下のPython ドキュメントで確認できます。
strftime() と strptime() の書式コード- Python ドキュメント
import datetime dt = datetime.datetime.now() print("-- datetime型 --") print(dt) print(type(dt)) # datetime型 → 文字列型 s = dt.strftime("%Y-%m-%d %H:%M:%S") print("-- 文字列型 --") print(s) print(type(s))
-- datetime型 -- 2022-05-27 05:16:29.457426 <class 'datetime.datetime'> -- 文字列型 -- 2022-05-27 05:16:29 <class 'str'>
文字列型 ⇒ datetime型
文字列型をdatetime型に変換するにはstrptime()メソッドを使います。 strptimeは2つの引数が必要で、第1引数が日時の文字列データ、 第2引数が書式です。
strptime(str_date, format)
サンプルコードは次の通りです。
import datetime s = "2022-05-27 10:11:23" print("-- 文字列型 --") print(s) print(type(s)) # 文字列型 → datetime型 dt = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") print("-- datetime型 --") print(dt) print(type(dt))
-- 文字列型 -- 2022-05-27 10:11:23 <class 'str'> -- datetime型 -- 2022-05-27 10:11:23 <class 'datetime.datetime'>
タイムスタンプ ⇒ 文字列型
タイムスタンプから直接文字列に変換する方法はないので、 間にdatetime型を挟んで 「タイムスタンプ ⇒ datetime型 ⇒ 文字列型」と変換します。
import datetime # タイムスタンプ ts = 1653615922 print("-- タイムスタンプ --") print(ts) print(type(ts)) # タイムスタンプ → datetime dt = datetime.datetime.fromtimestamp(ts) # datetime → 文字列型 s = dt.strftime("%Y-%m-%d %H:%M:%S") print("-- 文字列型 --") print(s) print(type(s))
-- タイムスタンプ -- 1653615922 <class 'int'> -- 文字列型 -- 2022-05-27 10:45:22 <class 'str'>
文字列型 ⇒ タイムスタンプ
文字列型からタイムスタンプへも直接変換する方法はないので、 「文字列 ⇒ datetime型 ⇒ タイムスタンプ」と変換します。
import datetime # 文字列型 s = "2022-05-27 10:11:23" print("-- 文字列型 --") print(s) print(type(s)) # 文字列型 → datetime型 dt = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") # datetime → タイムスタンプ ts = datetime.datetime.timestamp(dt) print("-- タイムスタンプ --") print(ts) print(type(ts))
-- 文字列型 -- 2022-05-27 10:11:23 <class 'str'> -- タイムスタンプ -- 1653613883.0 <class 'float'>
まとめ
これまで出てきた4つのメソッドをまとめておきます。
# datetime型 → タイムスタンプ ts = datetime.datetime.timestamp(dt) # タイムスタンプ → datetime型 dt = datetime.datetime.fromtimestamp(ts) # datetime型 → 文字列型 s = dt.strftime("%Y-%m-%d %H:%M:%S") # 文字列型 → datetime型 dt = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")