とある通信機器からUTCエポックを受信する機会があった。Python3での日本標準時への変換方法をPythonライブラリーリファレンスで調べた。
方法
変換方法は1つではないが、datetime
モジュールとサードパーティーライブラリー dateutil
パッケージを使用する方法がある。 dateutil
は標準では無いので実行環境にない場合はインストールが必要。
dateutil
パッケージのインストールコマンド
pip install python-dateutil
変換コード
from datetime import datetime
from dateutil import tz
utc_epoch = 1630557969 # UTCエポックの一例
time_zone = tz.gettz('Asia/Tokyo')
jst_time = datetime.fromtimestamp(utc_epoch, time_zone)
UTCエポックは少数部も含むが、ここではetc_epoch
に整数部だけの数値を代入。tz.gettz(name=None)
メソッドは引数にIANAタイムゾーンの文字列表現を取って tzinfo
オブジェクトを返す。引数の Asia/Tokyo
で日本標準時を意味する。 Ameria/NewYork
, Europe/Paris
など別のタイムゾーンオブジェクトを受け取ることも可能。datetime.fromtimestamp(timestamp, tz=None)
メソッドは第一引数にPOSIXタイム, 第二引数にオブジェクトを受けて datetime
オブジェクトを返す。
余談
エポックとは時刻の基準のこと。Windows、ほとんどのUnixシステムでは1970年1月1日0時0分0秒(UTC)を基準にとっている。Python 3では下記のようにしてエポックを調べられる。エポック時間とは、この基準からの経過秒を示す。Unixタイムと表現されることもある。
import time
print(time.gmtime(0))