須賀です。

複数の暦法を順次用いたような暦に対応するために ListCalendar という
クラスを定義する予定です(7年前に作りかけていた C++ の頃から存在)。

国名, 年号(*), 統治者名 がキーになるのですが、逆変換の都合もあり、
ユーザから見える形としては配列にする予定でいます(下記の例で言うなら、
終了日のJDも必要なのにたいていの場合次の開始日の前日が終了日に一致
するので冗長、同じ年号が複数回使われている場合があって年号だけでは
ハッシュのキーにならない...など)

仕様案のとおり、年のはじめが1月1日でない暦法にも対応するのですが、
ListCalendar.new の引数に、

  "たけ(tk)" => ["グレゴリオ暦", 誕生日のJD, "年初はEpoch"],

なんてユーザが指定を付け加えるだけで、

Date.new("たけ(tk)", xx)   # たけ(tk)さんの xx歳の誕生日のオブジェクト

が使えるようにするつもりです([]内の部分はまだ適当)。

(*) 必ずしも元号には限らない Key もあり得るので、少し広い意味を
指す言葉としてwhen.exeでは「年号」ということにしています。

>  これって、元号でも良いようにすれば使いやすそうですね。
> 
> Date.new( "昭和" , 20 , 8 , 15 )
> 
>  元号→暦法のハッシュがあれば簡単に実現できそう。
> 
> GENGO_REKIHOU = {
>   ....
>   "明治" => ["太陰暦/太陽暦" , 開始日のJD , 2番目の暦の開始日] , 
>   "大正" => ["太陽暦"        , 開始日のJD] , 
>   "昭和" => ["太陽暦"        , 開始日のJD] ,
>   "平成" => ["太陽暦"        , 開始日のJD] ,
> }

-- 
////////// 須賀 隆 ///////////////////////// SGB02104 / nifty.com ////////
// http://www.asahi-net.com/~dd6t-sg/ mailto:suchowan / box.email.ne.jp //