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

ElixirAdvent Calendar 2024

Day 24

Elixir Timex.shift/2の紹介

Last updated at Posted at 2024-12-24

こんにちは!
プログラミング未経験文系出身、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)dateoptionsだけ調整します。

iex
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を使用することでカスタムな日時調整ができます。

iex
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時間進みます。
これをまたいで使用する場合自動調整が入ります。

iex
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秒後にしてみましょう。

iex
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と比較して下記の違いがあります。

  1. DatetimeモジュールがElixirの標準ライブラリであるのに対して、Timexは外部ライブラリなので導入が必要です
  2. 日時を操作できる単位について、サポート範囲が異なります
  3. 日時を操作できる単位について
    • DateTimeモジュールは単数形(:hour)で呼称します
    • Timexモジュールは複数形(:hours)で呼称します

上記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は先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

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

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

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

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

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