LoginSignup
8
1

NervesでUTCでなくローカルタイムで時間を表示したい

Last updated at Posted at 2021-12-21

ローカルタイムで時間を表示するためには、まずタイムゾーンデータベースが必要となるようです。
Nervesファームウエア開発の上ではNervesコアチームの開発したnerves_time_zonesというElixirパッケージが便利です。

Screen Shot 2021-12-21 at 12.12.38 PM.png

インストール

まずnerves_time_zonesを依存関係リストに追加し、mix deps.getコマンドを実行します。

mix.exs
def deps do
  [
    {:nerves_time_zones, "~> 0.1.2"}
  ]
end

設定

nerves_time_zonesの設定はコンパイル時もしくは実行時に設定可能です。

コンパイル時

  • config/config.exsでタイムゾーンの初期値を設定。
  • 何も指定しない場合はUTCが使用されます。
config/config.exs
config :nerves_time_zones, default_time_zone: "Asia/Tokyo"

実行時

  • IExやコードでタイムゾーンを変更したい場合。
# 現在使用されているタイムゾーンを表示
iex> NervesTimeZones.get_time_zone()

# タイムゾーンを変更
iex> NervesTimeZones.set_time_zone("America/New_York")

# タイムゾーンを初期値に戻す
iex> NervesTimeZones.reset_time_zone()

その他の便利な関数

# 使用可能なタイムゾーン名リストを表示
iex> NervesTimeZones.time_zones()
["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", ...

# タイムゾーン名が使用可能か確認
iex> NervesTimeZones.valid_time_zone?("Autoracex")
false

iex> NervesTimeZones.valid_time_zone?("Asia/Tokyo")
true

# nerves_time_zonesが使用するタイムゾーン関連の環境変数を表示。
iex> NervesTimeZones.tz_environment()
%{
  "TZ" => "/srv/erlang/lib/nerves_time_zones-0.1.10/priv/zoneinfo/America/New_York",
  "TZDIR" => "/srv/erlang/lib/nerves_time_zones-0.1.10/priv/zoneinfo"
}

:tada::tada::tada:

8
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1