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")