Django入門|テンプレートでエポック秒(UNIX秒)を変換して表示のイメージ画像

Django入門|テンプレートでエポック秒(UNIX秒)を変換して表示

  • 公開日:2020/03/08
  • 更新日:2020/03/08
  • 投稿者:n bit

Djangoのテンプレートでエポック秒(UNIX秒)を2020年01月01日 00:00:00等の表記形式に変換して表示する方法を解説。APIで呼んできたデータがエポック秒(UNIX秒)だった場合などにも使えます。

  • Python
  • Django

この記事は約 分で読めます。(文字)

テンプレートでエポック秒(UNIX秒)を変換して表示

Djangoのテンプレートではエポック秒(UNIX秒)を「2020年01月01日 00:00:00」などの表記形式に標準機能で変更して表示させることができません。そのため独自の関数をカスタムテンプレートフィルターとして実装。テンプレートで呼び出して利用します。

独自の関数をカスタムテンプレートフィルターに実装

カスタムテンプレートフィルター内にエポック秒(UNIX秒)を「2020年01月01日 00:00:00」表記に変更する独自の関数を実装します。独自の関数は以下の通り。

import time

def change_epoch(epoch):
try:
ep = float(epoch)
except ValueError:
return None

return time.strftime("%Y年%m月%d日 %H:%M:%S", time.localtime(ep))

register.filter(change_epoch)

やっている事はとてもシンプル。テンプレート側から受け取ったエポック秒(UNIX秒)を

  • time.strftime()

を使って2の表示形式に変更しているだけ。

今回は日本語表記のエリアで使用されることを想定して

  • time.localtime()

でローカル時間に変更してから表記を変更しました。

もしUTCのまま利用したいのであれば、time.localtime()の部分を

  • time.gmtime()

に変更しましょう。

独自のテンプレートフィルターをテンプレートから呼び出す

後は先ほど作成した独自のテンプレートフィルタを以下の様にテンプレート側から呼び出せば、エポック秒(UNIX秒)が「2020年01月01日 00:00:00」等の表記形式に変更されます。

{{ epoch_time|change_epoch }}

変更例

  • エポック秒(UNIX秒):1583586342

    ↓:変更
  • 2020年03月07日 22:05:42

変更例のように表示が変わっていれば実装がうまくできています。

今日のdot

今回はDjangoのテンプレートでエポック秒(UNIX秒)を「2020年01月01日 00:00:00」等の表記形式に変更するやり方をカスタムテンプレートフィルターを使ったやり方で解説しました。

様々なアプリケーションやクラウドサービスからAPI経由でデータを取得するとエポック秒(UNIX秒)形式で取得することが多いでしょう。いちどデーターベースに格納する場合は特に気にする必要はありませんが、直接テンプレートに値を出力する場合は今回のようなテンプレートフィルタを使っての変換が必要となります。