お困りの方へ
この記事では、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の仕様書です。詳しい仕様はこちらをご覧ください。