7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DateTime.now!/2を利用して現在時刻を取得する

Last updated at Posted at 2023-10-16

こんにちは!
プログラミング未経験文系出身、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プロジェクトを作成し、下記で依存モジュールを追加します。

oct16/lib/mix.exs
   defp deps do
     [
+      {:tzdata, "~> 1.1"},
+      {:timex, "~> 3.7"}
     ]
   end
shell
mix deps.get

こうすることでUTC以外のタイムゾーンを使用できるようになります。

shell
iex -S mix
iex
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
iex()> Tzdata.zone_list |> IO.inspect(limit: :infinity, printable_limit: :infinit)

タイムゾーン一覧に"Asia/Tokyo"も入っています。1

iex
iex()> Tzdata.zone_list |> Enum.filter(& String.contains?(&1, "Asia/Tokyo"))   
["Asia/Tokyo"]

日本の現在時刻を取得してみる

iex
iex()> DateTime.now!("Asia/Tokyo")
#DateTime<2023-10-17 00:22:57.889440+09:00 JST Asia/Tokyo>

ばっちり取得できていますね!2

~Elixirの国のご案内~

↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。

We Are The Alchemists, my friends!:bouquet:3
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。4

  1. https://qiita.com/piacerex/items/6479e1b9ba5a6cef55ce
    タイムゾーンを検索する方法を参考にさせていただきました。

  2. もう一つ、タイムゾーンを持たないNaiveDateTime(~Nシギル)というものがあり、こちらのほうが何かと使いやすいらしいのですが、それは別記事に分けようと思います。

  3. @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。

  4. @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中!

7
1
0

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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?