7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DateTimeモジュール で遊んでみたシリーズ番外編 -Livebookでtzdata導入

Last updated at Posted at 2024-12-18

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はLivebookでtzdataを導入する方法をまとめます。

目次

1.DateTimeモジュール で遊んでみたシリーズ① -事前準備編
2.DateTimeモジュール で遊んでみたシリーズ② -DateTime.add ~ DateTime.compare の紹介
3.DateTimeモジュール で遊んでみたシリーズ③ -DateTime.convert ~ DateTime.from_gregorian_seconds の紹介
4.DateTimeモジュール で遊んでみたシリーズ④ -DateTime.from_iso8601 ~ DateTime.from_naive! の紹介
5.DateTimeモジュール で遊んでみたシリーズ⑤ -DateTime.from_unix ~ DateTime.new! の紹介
6.DateTimeモジュール で遊んでみたシリーズ⑥ -DateTime.now ~ DateTime.shift_zone! の紹介
7.DateTimeモジュール で遊んでみたシリーズ⑦ -DateTime.to_date ~ DateTime.to_string の紹介
8.DateTimeモジュール で遊んでみたシリーズ⑧ -DateTime.to_time ~ DateTime.utc_now の紹介
9.DateTimeモジュール で遊んでみたシリーズ番外編 -Livebookでtzdata導入(本記事)

目的

DateTimeモジュールに含まれる関数を触って機能を理解したい。
そのためLivebookにtzdataのインストールをしたい。

DateTimeモジュール で遊んでみたシリーズ① -事前準備編 でlocal環境にてやったことのLivebook版です。

実行環境

Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0
Livebook v0.14.0-dev

tzdataの導入

事前確認

tzdataを未導入の状態で引数にタイムゾーンを指定する関数を使うとどうなるか確認しておきましょう。

iex
Application.get_env(:elixir, :time_zone_database)
Calendar.UTCOnlyTimeZoneDatabase

UTC以外のタイムゾーンを扱おうとするとエラーになります。

iex
DateTime.from_naive!(~N[2018-11-15 10:00:00], "Europe/Copenhagen", Calendar.UTCOnlyTimeZoneDatabase)
** (ArgumentError) cannot convert ~N[2018-11-15 10:00:00] to datetime, reason: :utc_only_time_zone_database
    (elixir 1.17.3) lib/calendar/datetime.ex:697: DateTime.from_naive!/3
    #cell:wmgxue6myjgaginj:1: (file)

Notebook dependencies and setup

"Notebook dependencies and setup" セルに下記を追加します。1
Reconnect and setupを押下します。
localでいうところのmix.exsの変更 + mix.deps.getにあたる部分です。

image.png

Applicationの設定変更

新しいセルを追加。
下記を追加しevaluateします。
localでいうところのconfig.exsの追加/変更にあたる部分です。

+ Application.put_env(:elixir, :time_zone_database, Tzdata.TimeZoneDatabase)

動作確認

:time_zone_databaseの値が変わったことを確認します。

iex
Application.get_env(:elixir, :time_zone_database)
Tzdata.TimeZoneDatabase

引数にタイムゾーンを指定する関数を使ってみます。

iex
DateTime.from_naive!(~N[2018-11-15 10:00:00], "Europe/Copenhagen", Calendar.UTCOnlyTimeZoneDatabase)
#DateTime<2018-11-15 10:00:00+01:00 CET Europe/Copenhagen>

LivebookでもUTC以外のタイムゾーンが扱えるようになりました(^▽^)/

~Elixirの国のご案内~

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

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

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

  1. "Notebook dependencies and setup"セルの位置が初見殺しなので注意。こちらの@RyoWakabayashiさんの記事が動画付きで分かりやすいです。

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

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?