いくつかの広く普及しているプログラミング言語において、日時型同士の比較に比較演算子 (==
や>
など) を使うことはよくあります。
しかし、Elixirでは日時型の比較に比較演算子を使うと思いもよらない結果になります。下記の例を見てください。
iex> dt1 = %DateTime{calendar: Calendar.ISO, day: 12, hour: 0, month: 1, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC", microsecond: {878630, 6}, minute: 57, second: 59}
#DateTime<2017-01-12 00:57:59.878630Z>
iex> dt2 = %DateTime{calendar: Calendar.ISO, day: 12, hour: 0, month: 1, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC", microsecond: {481183, 6}, minute: 58, second: 2}
#DateTime<2017-01-12 00:58:02.481183Z>
iex> dt1 <= dt2
false
Elixirにおいて構造体は特殊なマップであり、日時を表すDateTime
も例外ではありません。
そのためDateTime
の比較にはDateTime.compare/2
を使わなければなりません。
iex> DateTime.compare(dt1, dt2)
:lt
コメントを送る
コメントはブログオーナーのみ閲覧できます