こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はTimex.shift/2について学んだことをまとめます。
目的
Timex.shift/2を触って機能を理解したい
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0
Timex.shiftとは
Timex.shift(date, options)
はdate
をoptions
だけ調整します。
例
Datetime.shift
datetime = ~U[2024-12-24 14:12:20.713086Z]
Timex.shift(datetime, years: 1)
~U[2025-12-24 14:12:20.713086Z]
durationを使用した例
options
に:duration
を使用することでカスタムな日時調整ができます。
datetime = ~U[2024-12-24 14:12:20.713086Z]
duration_days = Timex.Duration.from_days(3)
duration_hours = Timex.Duration.from_hours(1)
combined_duration = Timex.Duration.add(duration_days, duration_hours)
Timex.shift(datetime, duration: combined_duration)
カスタムな日時調整(今回の場合3日と1時間)がされます。
~U[2024-12-27 15:12:20.713086Z]
サマータイム開始/終了時刻をまたぐ場合
米国ニューヨークの次のサマータイム開始時刻は、現地時刻の3/9の02:00です。
このタイミングで時計が1時間進みます。
これをまたいで使用する場合自動調整が入ります。
dt = Timex.to_datetime({{2025,3,9}, {1,59,59,123000}}, "America/New_York")
この時点では"EST"(米国東部標準時)の表示になっています。
#DateTime<2025-03-09 01:59:59.123-05:00 EST America/New_York>
サマータイム開始時刻をまたいで3秒後にしてみましょう。
dt |> Timex.shift(seconds: 3)
サマータイム開始時刻の1時間+3秒後の値を返します。
また、"EDT"(米国東部夏時間)の表示になっています。
#DateTime<2025-03-09 03:00:02.123000-04:00 EDT America/New_York>
類似の関数
DateTime.add
DateTime.add
はElixirの標準ライブラリであるDateTimeモジュールの関数です。
Timex.shift
と比較して下記の違いがあります。
- DatetimeモジュールがElixirの標準ライブラリであるのに対して、Timexは外部ライブラリなので導入が必要です
- 日時を操作できる単位について、サポート範囲が異なります
- 日時を操作できる単位について
- DateTimeモジュールは単数形(
:hour
)で呼称します - Timexモジュールは複数形(
:hours
)で呼称します
- DateTimeモジュールは単数形(
上記2.3.をまとめると以下の通りです↓
単位 | Timex.shift | DateTime.add |
---|---|---|
year | 〇(:years) | ✕ |
month | 〇 (:months) | ✕ |
week | 〇 (:weeks) | ✕ |
day | 〇 (:days) | 〇 (:day) |
hour | 〇 (:hours) | 〇 (:hour) |
minute | 〇 (:minutes) | 〇 (:minute) |
second | 〇 (:seconds) | 〇 (:second) |
millisecond | 〇 (:milliseconds) | 〇 (:millisecond) |
microsecond | 〇 (:microseconds) | 〇 (:microsecond) |
nanosecond | ✕ | 〇 (:nanosecond) |
duration | 〇 | ✕ |
positive integer | ✕ | 〇 |
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩