何回も書く機会があるので、まとめておこうと思います。
何も外部ライブラリをインストールしていない状態ではEtc/UTC
以外のタイムゾーンを使用することができません。自分のようにAsia/Tokyo
を使いたい人はTzdata
やTimex
といった外部ライブラリをインストールする必要があります。
現在の日付を取得する関数(Date.utc_today()
)が標準ライブラリとして実装されていますが、当然ながらUTC
タイムゾーンでの現在日しか取得することができません。
iex(8)> Date.utc_today() ~D[2023-04-09]
ちょっとした処理を書きたいだけなのに、外部ライブラリをインストールしないといけないのは面倒です。
...ということで、外部ライブラリなしで日本の現在の日時を取得する方法を紹介したいと思います。
多分これが一番早いと思います
defmodule AsiaTokyo.Date do def now, do: with { :ok, date } <- new_date(), do: date defp new_date do {{ year, month, date }, _} = :calendar.local_time() Date.new(year, month, date) end end AsiaTokyo.Date.now |> IO.inspect # ~D[2023-04-09]
※PCに設定されたタイムゾーンの設定値に依存するので、マシンによっては結果が変わる可能性があります。
筆者の動作環境