日本語 · English(未訳)

ADR-11: 粒度は表示射影、幅は演算子の規約引数

判断: 粒度(年・月・日・時・分・秒・週・半期・四半期・カスタム)を型に乗せず、 軸上の位置(タイムスタンプ)の表示射影として扱う。一方、軸上の長さ(オフセットの幅)は 表示形式ではなく、オフセット演算子が背負う意味とし、必須引数で「どの幅か」を指定させる。

背景: 市民時には、見た目が同じ「時刻表示」でありながら演算で振る舞いが分裂する二種が同居する。 位置(タイムスタンプ)は表示形式の違いに尽きる(ここは粒度=表示で正しい)。しかし長さ (デュレーション)は軸上で一定でない。市民時の「1 日後」は DST 切替日に 23 時間にも 25 時間にもなり、 「1 か月後」は 28〜31 日で幅が変わる。低い尺度で表示しても、この二義性は消えない。曖昧さは表示でなく 「+5 時間」という演算が複数の意味を持つことにあり、結果を細かく表示しても遡って解決されないため。

却下した案: 「全て市民時、経過時間が欲しければ低い尺度で表示すればよい」案。 位置については真だが幅については偽。表示と演算の取り違えのため却下。

帰結: 型は一本のまま(ADR-05 維持)、DST・月長・閏を取りこぼさない。 粒度をまたぐ合成は、粗い粒度を窓として細かい粒度に渡す(月が日を束ねた関係の再適用)。 ストライド(「月境界を無視して N 営業日ごと」「日境界を無視して 5 時間ごと」のような、 走査しながら数えて間引く状態付きオンライン変換)を、選択子とは別の演算子族として追加する。