漢の文帝の“改暦”(続き)
2012-08-21の「漢の文帝の“改暦”」の記事のフォローアップです。
大分前から実装済みの When::CalendarTypess::ChineseTwin::顓頊暦は
銀雀山漢簡の時代の置閏に一致したもので、紀元前162年以降は実際の
置閏とずれます。
実際の暦は、紀元前162年より前は冬至が11月になるように閏が配置
されていましたが、紀元前162年以降は雨水が1月になるように変わっ
ているのです。[1]
When::CalendarTypess::ChineseLuniSolar は、内部変数 @base_month
を 11 から 1 に変えるだけで済むように設計しましたが、いつでも
できる…ということで、実装が先延ばしになっていました。
今回、ようやく残暦法のひとつとして実装を済ませました。[2]
require 'when_exe'
require 'when_exe/region/chinese/calendars'
include When
def verify(calendar, range)
cdate = when?("#{range.first}-1-1^^ChineseTwin::#{calendar}")
while range.include?(cdate.year)
tdate = When::Chinese_221 ^ cdate
p [cdate, tdate] unless cdate.cal_date[1..2] == tdate.cal_date[1..2]
cdate += P1M
end
end
verify('顓頊暦', -202..-162) # => 出力(=差分)なし
verify('顓頊暦後期', -161..-104) # => 出力(=差分)なし
以前に江戸暦のバリエーションに名前を付けた際、施行された年の干支
を名前に付けたのですが、顓頊暦の時代は、いわゆる顓頊暦紀年法を
考慮せねばならず年の干支では混乱の危険があると考え、紀元前162年
以降の部分を計算する暦法名には「顓頊暦後期」を使いました。
[1] 当時、雨水と1月を対応付けるという意図があったのか、結果的に
たまたまそうなったのかは、判断を保留すべきでしょう。
[2] ソースコードはこちら。
例によってライブラリでの提供は次のバージョンアップ時です。
大分前から実装済みの When::CalendarTypess::ChineseTwin::顓頊暦は
銀雀山漢簡の時代の置閏に一致したもので、紀元前162年以降は実際の
置閏とずれます。
実際の暦は、紀元前162年より前は冬至が11月になるように閏が配置
されていましたが、紀元前162年以降は雨水が1月になるように変わっ
ているのです。[1]
When::CalendarTypess::ChineseLuniSolar は、内部変数 @base_month
を 11 から 1 に変えるだけで済むように設計しましたが、いつでも
できる…ということで、実装が先延ばしになっていました。
今回、ようやく残暦法のひとつとして実装を済ませました。[2]
require 'when_exe'
require 'when_exe/region/chinese/calendars'
include When
def verify(calendar, range)
cdate = when?("#{range.first}-1-1^^ChineseTwin::#{calendar}")
while range.include?(cdate.year)
tdate = When::Chinese_221 ^ cdate
p [cdate, tdate] unless cdate.cal_date[1..2] == tdate.cal_date[1..2]
cdate += P1M
end
end
verify('顓頊暦', -202..-162) # => 出力(=差分)なし
verify('顓頊暦後期', -161..-104) # => 出力(=差分)なし
以前に江戸暦のバリエーションに名前を付けた際、施行された年の干支
を名前に付けたのですが、顓頊暦の時代は、いわゆる顓頊暦紀年法を
考慮せねばならず年の干支では混乱の危険があると考え、紀元前162年
以降の部分を計算する暦法名には「顓頊暦後期」を使いました。
[1] 当時、雨水と1月を対応付けるという意図があったのか、結果的に
たまたまそうなったのかは、判断を保留すべきでしょう。
[2] ソースコードはこちら。
例によってライブラリでの提供は次のバージョンアップ時です。
この記事へのコメント