Temporalにおけるタイムゾーンの曖昧性
サマータイムやタイムゾーン変更による問題
これは一意に決まる
これが一意に決まらない
サマータイム : サマータイムは開始時と終了時に同じ時刻が2回出現したり、特定の一時間が無くなったりする
タイムゾーン変更 : 今後変更される可能性があり、本来想定されていたオフセットと新しいオフセットが衝突する可能性
一位に定まらないのはいた仕方ないので
Exact Timeに変更するようなメソッドには「曖昧な時どう解決するか」のオプションであるdisambiguationオプションがある 'compatible'(デフォルト): タイムゾーンが負の方向へ変化している範囲では'earlier'、正の方向へ変化している範囲では'later'として振る舞う。
'earlier': 2 つの exact time のうち、早い方が返却される。
'later': 2 つの exact time のうち、遅い方が返却される。
'reject': RangeErrorが投げられる
タイムゾーン定義変更による曖昧性の解決策
基本的に過去のタイムゾーン定義を変えることはないので、基本的には未来の話
ただ未来の日時を扱うことはよくある
'use' : 与えられたタイムゾーンオフセットを優先する。
'ignore': 最新のタイムゾーン定義から得られるオフセットを用いる
'prefer':与えられたオフセットがそのタイムゾーンで有効ならそちらを採用。もし無効なら、新のタイムゾーン定義から得られるオフセット
'reject': 入力されたタイムゾーンにおいて、与えられたオフセットが無効な場合はRangeError