こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はDateTime.now!/2を利用して東京の現在時刻を取得する方法をまとめます。
目的
DateTime.now!/2を利用して東京の現在時刻を取得します。
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.14.3
Erlang v26.0.2
Phoenix v1.7.3
DateTime関数群について
Elixirで日付+時間を扱う関数群です。
事前準備
ElixirはそのままではUTC以外のタイムゾーンを使用できませんので、新しいElixirプロジェクトを作成し、下記で依存モジュールを追加します。
defp deps do
[
+ {:tzdata, "~> 1.1"},
+ {:timex, "~> 3.7"}
]
end
mix deps.get
こうすることでUTC以外のタイムゾーンを使用できるようになります。
iex -S mix
iex()> Tzdata.zone_list
["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers",
"Africa/Asmara", "Africa/Asmera", "Africa/Bamako", "Africa/Bangui",
"Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville",
"Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta",
"Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti",
"Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone",
"Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala",
"Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos",
"Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi",
"Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru",
"Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi",
"Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou",
"Africa/Porto-Novo", "Africa/Sao_Tome", ...]
上記は途中省略されています。全部を見たい方は下記をどうぞ。IO.inspectの途中省略をなしにするオプションです。
(出力結果は長いので書きません。お手元でお試しください)
iex()> Tzdata.zone_list |> IO.inspect(limit: :infinity, printable_limit: :infinit)
タイムゾーン一覧に"Asia/Tokyo"
も入っています。1
iex()> Tzdata.zone_list |> Enum.filter(& String.contains?(&1, "Asia/Tokyo"))
["Asia/Tokyo"]
日本の現在時刻を取得してみる
iex()> DateTime.now!("Asia/Tokyo")
#DateTime<2023-10-17 00:22:57.889440+09:00 JST Asia/Tokyo>
ばっちり取得できていますね!2
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!3
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。4
-
https://qiita.com/piacerex/items/6479e1b9ba5a6cef55ce
タイムゾーンを検索する方法を参考にさせていただきました。 ↩ -
もう一つ、タイムゾーンを持たないNaiveDateTime(~Nシギル)というものがあり、こちらのほうが何かと使いやすいらしいのですが、それは別記事に分けようと思います。 ↩
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩