14
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?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2022

Day 19

今日のElixirSchoolメモ14「日付と時間」

Posted at

ElixirSchoolの勉強メモです。

Time

# 現在の時刻を取得する
iex(39)> Time.utc_now
~T[15:12:13.525286]
# Time構造体を作るためにシギルを使える
iex(40)> ~T[19:39:13.056226]
~T[19:39:13.056226]
iex(41)> t = ~T[19:39:31.056226]
~T[19:39:31.056226]
iex(42)> t.hour
19
iex(43)> t.minute
39
iex(44)> t.day
** (KeyError) key :day not found in: ~T[19:39:31.056226]

構造体の名前にアクセスできるが、この構造体は1日の時間帯のみを含んでいて、日/月/年のデータはありません。

Date

Timeに対してDate構造体は現在の日付に関する情報を持ち、現在の時間に関する情報は持たない。

iex(44)> Date.utc_today
~D[2022-12-17]
iex(46)> {:ok, date} = Date.new(2020, 12,12)
{:ok, ~D[2020-12-12]}
# 与えられた日時がどの曜日にあたるのかを計算する
iex(47)> Date.day_of_week date
6
# うるう年かチェックする
iex(48)> Date.leap_year? date
true

NaiveDateTime

Elixirには日付と時間を同時に含む構造体が2種類ある。
NatveDateTimeはタイムゾーンのサポートがない。

iex(49)> NaiveDateTime.utc_now
~N[2022-12-17 15:19:33.758957]

DateTime

DateTimeは時間と日時を両方持ち、タイムゾーンもサポートしている。

また、タイムゾーンを提供するだけでなく、NaiveDateTimeからDateTimeのインスタンスを作ることができる。

iex(50)> DateTime.from_naive(~N[2016-05-24 13:26:08.003], "Etc/UTC")
{:ok, ~U[2016-05-24 13:26:08.003Z]}

タイムゾーンの利用

Elixir本体にはタイムゾーンデータがない。
この問題を解決するには tzdata パッケージをインストールして設定する必要がある。

それをインストールした後、Tzdataをタイムゾーンデータベースとして使用するように、Elixirグローバル設定をする必要がある。

下記をPJのmix.exsのdepsに追加し、mix deps.getをする

{:tzdata, "~> 1.1"},
config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase
iex(2)> paris_datetime = DateTime.from_naive!(~N[2019-01-01 12:00:00], "Europe/Paris")
** (ArgumentError) cannot convert ~N[2019-01-01 12:00:00] to datetime, reason: :utc_only_time_zone_database
    (elixir 1.14.2) lib/calendar/datetime.ex:635: DateTime.from_naive!/3
14
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
14
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?