PythonでUNIX時間を実時間に変換する

お困りの方へ

この記事では、UNIX時間(POSIXタイムスタンプ)という数値を実時間に変換してみます。


Wikipediaでは「UNIX時間またはUNIX時刻POSIX timeとはコンピューターシステム上での時刻表現の一種。協定世界時(UTC)での1970年1月1日午前0時0分0秒から形式的な経過秒数として表される。」となっています。

現在時刻のUNIX時間を取得する

現在時刻のUNIX時間=POSIXタイムスタンプを取得してみます。

2024-09-01 09:00:00のUNIX時間は1725148800.0となりました。

from datetime import datetime, timezone
from dateutil import tz
JST = tz.gettz('Asia/Tokyo')
UTC = tz.gettz('UTC')

# 現在の時刻を1時間単位に丸める。
now = datetime.now().replace(minute=0, second=0, microsecond=0)
print(now)
print(type(now))

# 2024-09-01 09:00:00
# <class 'datetime.datetime'>

# POSIXタイムスタンプに変換する。
now_posix = now.timestamp()
print(now_posix)
print(type(now_posix))

# 1725148800.0
# <class 'float'>

UNIX時間は経過秒数なので、UTCでもJSTでも同じ数値となります。

now_utc = datetime.now(timezone.utc).replace(minute=0, second=0, microsecond=0)
print(now_utc)

# 2024-09-01 00:00:00+00:00

now_jst = datetime.now(JST).replace(minute=0, second=0, microsecond=0)
print(now_jst)

# 2024-09-01 09:00:00+09:00

now_utc_posix = now_utc.timestamp()
print(now_utc_posix)

# 1725148800.0

now_jst_posix = now_jst.timestamp()
print(now_jst_posix)

# 1725148800.0

datetime.timestampの仕様書です。詳しい仕様はこちらをご覧ください。

UNIX時間をdatetime.fromtimestampで変換する

上のサンプルコードで取得した、UNIX時間1725148800[秒]を使用して、実時間に変換します。

UNIX時間1725148800は、実時間では2024-09-01 09:00:00となりました。

t = datetime.fromtimestamp(1725148800)
print(t)
print(type(t))

# 2024-09-01 09:00:00
# <class 'datetime.datetime'>

UNIX時間をUTCやJSTに変換してみます。

# POSIXタイムスタンプをUTC時刻に変換する。
utc = datetime.fromtimestamp(1725148800, UTC)
print(utc)

# 2024-09-01 00:00:00+00:00

# POSIXタイムスタンプをJST時刻に変換する。
jst = datetime.fromtimestamp(1725148800, JST)
print(jst)

# 2024-09-01 09:00:00+09:00

UTCとJSTの時差は9時間なので、正しく変換されています。

datetime.fromtimestampの仕様書です。詳しい仕様はこちらをご覧ください。