いくつかの広く普及しているプログラミング言語において、日時型同士の比較に比較演算子 (==や>など) を使うことはよくあります。  
しかし、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 
 
コメントを送る
コメントはブログオーナーのみ閲覧できます