timeBasis

もともと ISO19108 では、TM_Calendar の役割名[1]として
timeBasis :

 一暦日の中の時間位置を定めるために、この暦
 とともに使用する時計

というのがあるのですが、いままで使っていませんでした。
定義通りの使い方をすると、時計の種類の数だけ、おなじ
TM_Calendar オブジェクト(例えばグレゴリオ暦)を作らねば
ならなくなってしまうからです。

一方、When::TM::Calendar は、独自の実装で、インスタンス
変数 timezone を使用していました。こちらは、天体現象に
基づいて日付が定義される暦法のために、日の境界を指定する
変数です。実装を軽くする意図もあって、時差をhour単位で
表現するただの実数でした。

今回、真太陽時午前零時を日の境界とする暦を定義できるように
仕様を整理した結果、timezone のかわりに time_basis を
使うこととしました。time_basis の定義域は When::TM::Clock
クラスなので、サブクラスとして真太陽時を使えるようになります。

これで、日本の旧暦の IRI は、

 _c:ChineseLuniSolar?timezone=9&intercalary_span=3

から[2][3]

 _c:ChineseLuniSolar?time_basis=+09:00:00&intercalary_span=3'

にかわります。

京都の真太陽時を使うのであれば、

 _c:ChineseLuniSolar?time_basis=(LAT?long=135.4520E&lat=35.0117N)

のようになります。これは timezone 変数ではできなかった
ことです。

web から使う場合 timezone 変数がなくなった副作用で、
エラーが発生する場合があるようです。そのような場合は、

 http://hosi.org:3000/cookies/ChineseLuniSolar
 http://hosi.org:3000/cookies/ChineseSolar

で、cookie の再設定を行ってください。

[1] インスタンス変数ですね。
[2] _c: は http://hosi.org/When/CalendarTypes/ です。
[3] intercalary_span=3は閏の配置が旧暦ルールであることを示します。
  農暦ルール(省略時)では intercalary_span=12です。

この記事へのコメント

この記事へのトラックバック