暦のこと (2) 太陽暦
地球が太陽の周囲を回ることを公転と言います。地球の地軸は、この公転軸に対して約23.4度だけ傾いています。地球上の場所により事情は異なりますが、日本のように中緯度の国では太陽の周囲を回る時の位置により日照時間に変化が生じます。これにより四季ができます。これが実際の1年であり 365.2422 (365.24218944)日です。これは地球の公転周期です。地球の公転は楕円軌道なので太陽との距離も大きく変わりますが、四季の変化は「太陽との距離」よりも「太陽との位置関係」の方が重要です。

古代ローマで採用された最初期のローマ暦はロムルス暦でした。紀元前750年頃から使われたようです。現在の年の初めに相当する日から約60日間は日付の無い日だったようです。この暦は1年を10ヶ月としたものでした。「octo-」とは「8」を意味する接頭語です。蛸は足が8本あるので英語で「オクトパス(octopus)」です。ピアノの白鍵盤のオクターブ(ド~ド)は8個です。ロムルス暦の「オクトーベル(October)」は8月でした。紀元前713年にヌマ暦になって、10月の後に11月と12月が加えられました。その後、紀元前153年の改暦で1年の始まりが「ヌマ暦で加えられた11月」ということになりました。それによって「月(month)の名前」が全部2ヶ月ずれてしまい、本来なら「8」を意味する「October」が10月になってしまいました。ロムルス暦は基本的に太陰暦かと思われます。ヌマ暦には2年に1度「閏2月」があったようなので、季節を調節するための太陰太陽暦かもしれません。

ジュリアス・シーザー(ユリウス・カエサル)がエジプトに遠征した時、すでにエジプトでは 1年を12ヶ月に分ける暦を使っていました。太陽暦です。おそらくピラミッドのような超巨大建造物があるため、特定の窓から一定の場所に当たる陽の光が「365日ごと」であると分かっていたのではないかと想像します。エジプトでは「30日の月」が12ヶ月と、端数の5日だったようです。シーザー(カエサル)はそれを改良して暦を定めました。これがユリウス暦です。紀元前46年から施行されました。

ユリウス暦では大の月と小の月が固定されていました。1月は31日間、2月は28日間、3月は31日間、4月は30日間、5月は31日間、6月は30日間、7月は31日間、8月は31日間、9月は30日間、10月は31日間、11月は30日間、12月は31日間という風にです。例外的に4年に1回の閏日を2月に入れました。これが2月29日です。このような年を「閏年」と言います。現在用いられているグレゴリオ暦の基本が既に出来ていました。

実際の地球の公転周期と比較しても、その当時としてはユリウス暦はかなり正確な暦でした。それでも長期的にみると少しずつ実際の季節と解離していきました。季節が400年について「約3日」ずつ、ずれていったのです。キリスト教圏では復活祭が重要な行事です。西暦325年(ユリウス暦)のニケア宗教会議にて、復活祭は「春分の後の満月の後の最初の日曜日」と規定されました。この「春分」の日が少しずつずれてしまったおかげで、復活祭が行われる季節が少しずつ変わっていきました。このため、ローマ法王グレゴリウス13世が1582年に暦を改正しました。この決定は2月24日に発表され、10月に施行されたようです。すでにずれてしまった10日分を削除し、1582年10月4日(ユリウス暦)の翌日を1582年10月15日(グレゴリオ暦)としました。1582年の10月5日から10月14日までの10日間は日付として存在しません。ただし歴史上の出来事として存在しないにしても、計算することはできます。1582年10月5日(ユリウス歴) = 1582年10月15日(グレゴリオ暦)ですから、単純な暦上の計算としては、
[ユリウス暦] + 10日 = [グレゴリオ暦] となります。ただし、この計算式で加えている「10日」は、あくまで「1582年前後で」ということです。ユリウス暦とグレゴリオ暦は400年で約3日ずれていきます。従って、ロシア革命(1917年)の時には13日の差になっていました。

1582年は織田信長が本能寺の変で自害した年にあたります。本能寺の変は天正10年 6月2日(宣明暦)です。この時点で用いられていたユリウス暦では1582年 6月21日に相当します。その3ヶ月半後にキリスト教圏ではグレゴリオ暦に改暦されました。ですから、信長の死はグレゴリオ暦に換算すると1582年7月1日ということになります。歴史上の出来事をグレゴリオ暦に変換することは、「現在の季節感」と一致させる時に必要です。

ロシアでは1918年までユリウス暦を使っていました。この頃にはユリウス暦とグレゴリオ暦の差は13日に伸びてます。日露戦争(1904年)の時、日本は既にグレゴリオ暦ですから、日本とロシア帝国では暦上で13日のズレ(差)がありました。ロシアの二月革命(1917年2月23日)と十月革命(1917年10月25日)は「ユリウス暦」での日付です。その頃に広く使われていたグレゴリオ暦では、それぞれ3月8日と11月7日になります。このロシア革命の翌年(1918年)2月にソビエト社会主義共和国連邦はグレゴリオ暦に改暦しました。ちなみに中国大陸では1912年の中華民国成立時にグレゴリオ暦に改暦されたようです。中華人民共和国の成立は1949年10月1日です。日本では1872年(明治5年)の改暦でした。

グレゴリオ暦における公転周期と暦の補正の原理について説明します。まず、ユリウス暦では 1年(平年)を 365日としています。実際の公転周期は 約 365.2422 日(365日5時間48分46秒)ですから、4年たつと約1日分が不足します。1日分の季節がズレるということです。0.2422×4=0.9688 (0.2421894×4=0.96875776)です。そのため、例外的な処置として4年に1度、閏日を2月の最後に挿入して補正します(2月29日)。この規則はグレゴリオ暦でも引き継がれました。閏日を挿入する年を「閏年」と言います。西暦年が4で割り切れる年に閏日を挿入します。近代では夏季オリンピックの年が、それに相当します。

ユリウス暦を改良した「グレゴリオ暦」では、閏日(2月29日)の例外的な挿入(ユリウス暦)に対して、さらに「例外規定」を定めました。この稿では便宜上、これを「例外の例外」と記します。これにはさらに例外があって、これを「例外の例外の例外」と記します。ユリウス暦にあった「例外」だけだと閏年は 400年について 100回分あることになりますが、このうち3回だけ閏日の挿入を省略したのです。

この原理を説明します。ユリウス暦は4年に1回だけ閏日を挿入するように定めましたが、実際は「3年に1度」と間違っていたり、途中で補正があったり、そう単純ではないようです。でも、これだと問題は複雑になりすぎるので、「厳密に守られていた」として計算してみます。

(1)閏日を挿入せず 1年を365日と固定した場合の、400年間の日数
365×400 = 146,000 日

(2)実際の1年を 365.2422 日(公転周期)とした場合の、400年の日数
365.2422×400 = 146,096.88 日

(1)-(2) = -96.88 日(約 - 97日)~ 実際よりも約97日足りません。そこで、ユリウス暦では4年に1度、閏日を挿入しました。400年あたり「100日分」を増やした訳です。でも、少し(約3日)増えすぎてしまいました。

(3)4年に1度、閏日を挿入した場合の、400年の日数
365×400 + 100 = 146,100 日

(3)-(2) = + 3.12 日(約 +3日) ~ 実際よりも約3日多くなってしまったということです。

ユリウス暦では「4年あたり1回の閏日」を機械的に挿入しました。当時として、かなり正確な補正でしたが、「(3)-(2)」で示すように400年あたり約3日分が「多すぎて」しまいます。そこでグレゴリオ暦では、このような不都合を修正したのです。「400年あたり100日分の閏日を挿入」というのがユリウス暦の定義でしたが、ここから3日を除けば、実際の地球の公転周期に、さらに近くなります。400年あたりで「100で割り切れる年」は4回、「400で割り切れる年」は1回あります。従って、100で割り切れる年を「例外の例外として省く」、さらに 400で割り切れる年を「例外の例外の例外として省かない」とすれば良いことになります。

これらの法則を単純化します。1年は原則として365日です。
[1] 例外として4年に1度、西暦年が4で割り切れる年に閏日(2月29日)を入れます。これはユリウス暦の時からある例外処置です。この結果、400年について3日多くなります。
[2] この「例外[1]」の例外として100年に1度、西暦年が 100で割り切れる年は閏日を挿入しないことにします。これで400年あたり4日分が減ります。[1]で増えた3日と合わせると、1日分が足りなくなります。すなわち、400年あたりに1日が足りないという事です。
[3] この「例外の例外[2]」の、さらに例外として400年に1度、西暦年が 400で割り切れる年には閏日を挿入します。これで差し引きゼロとなります。このグレゴリオ暦の補正も厳密に言うと完璧ではないのですが、誤差は2000~3000年で1日です。

たとえば西暦1900年は4で割り切れるので、「例外[1]」として閏日を入れたいところですが、100で割り切れるので「例外の例外[2]」として閏日は挿入されません。また西暦2000年は100で割り切れる場合の「例外の例外[2]」として閏日を外したいところですが、さらに400でも割り切れる場合の「例外の例外の例外[3]」として閏日が挿入されました。

このように西暦1900年と西暦2000年は、グレゴリオ暦にとって特殊な年でした。マイクロソフト社のエクセル(表計算)には混乱の跡があります。エクセルには、知る人ぞ知る「1900年閏日問題」があります。Windows版では、「1900年1月1日」が「1」から始まるように、日付をシリアル値(連続値)として計算する仕組みになっています。最大値は9999年12月31日の「2958465」です。日付がシリアル値に換算されているおかげで日付の演算が可能です。Windows版のエクセルでは、西暦1900年の閏日(2月29日)の処理が間違っています。マイクロソフト社は、他社のアプリケーションと互換性を保つためとして修正していません。これまでの集計結果が変わってしまっても困るので、ある意味では仕方がありません。ここで直感的な理解のために閏日(2月29日)と、その前後をピックアップしてマイクロソフト社が定めたシリアル値を書き出します。

日付   → シリアル値
1900/01/01 →     1 ← シリアル値はここから始まる
1900/02/28 → 59
1900/02/29 → 60 ← 閏日が「例外の例外[2]」として存在しないはずなのに、ある!!
1900/03/01 → 61
1901/02/29 → 存在しない
1902/02/29 → 存在しない
1903/02/29 → 存在しない
1904/02/29 → 1521 ← 閏日が「例外[1]」として存在する
1905/02/29 → 存在しない
1999/02/29 → 存在しない
2000/02/29 → 36585 ←閏日が「例外の例外の例外[3]」として存在する
2001/02/29 → 存在しない
2002/02/29 → 存在しない
2003/02/29 → 存在しない
2004/02/29 → 38046 ← 閏日が「例外[1]」として存在する
2100/02/29 → 存在しない ← 閏日が「例外の例外[2]」として存在しない
2400/02/29 → 182682 ← 閏日が「例外の例外の例外[3]」として存在する

すでに書いたように、西暦を4で割って「割り切れない年」には「閏日」が入りません。4で割り切れる年には「例外[1]」として「閏日」が入ります。西暦1900年は4で割り切れるので、本来なら「閏日」を入れたいところです。しかしながら100で割り切れるので「例外の例外[2]」として閏日を入れません。ところが、エクセルでは入っています。これは間違いです。西暦2000年は100で割り切れるので、本来なら「例外の例外[2]」として「閏日」は入れたくないところですが、400でも割り切れます。従って、「例外の例外の例外[3]」として「閏日」を入れるのです。

マイクロソフト社エクセルには、Windows版とMacintosh版があります。同じ関数でも返すシリアル値が異なっているそうです。Windows版では「1900年から始まる日付システム」を用い、Macintoshでは「1904年から始まる日付システム」を用いていることによるのでしょう。アップル社のmacOS自体が1904年1月1日をシリアル値の起算日としているようなので、この問題(1900年問題)を回避するためかもしれません。Windows版でも、バージョン2.0以降では「1904年から計算する」というチェックボックスが用意されているそうです。これをチェックした場合は、1900年~1903年の日付計算が無効となるようです。ですからマイクロソフト社は、Windows版での1900年2月29日の問題について、一応は対応していることになります。

ちなみに、エクセル(Windows版)は1900年 1月1日以前は連続した日付データとして扱ってくれません。そのため「Datevalue ("yyyy/mm/dd")関数」ではエラーになります。残念なことに明治時代の日数計算には利用できません。しかしながら裏技を考えました。閏年の「例外の例外」および「例外の例外の例外」を考慮すると、4000年分下駄を履かせるのが良いかと思われます。たとえば織田信長が自害した1582年7月1日(グレゴリオ暦換算)に4000年を加えることで5582年7月1日とするのです。こうすることで、他の日との差の計算が可能です。また、ウィンドウズ版のエクセルで生じていた1900年の閏日問題は、5900年には生じません。

別の関数である「Date (yyyy,mm,dd)関数」によると、「0000年 1月1日から1899年12月31日」は、そっくり「1900年 1月1日から3799年12月31日」と同じ数値になります。しかも、その翌日である3800年1月1日からは、シリアル値が1から再スタートするという、連続性がない奇妙な関数です。従って3799年12月31日から3800年1月1日をまたぐ日付の計算には用いることが出来ません。おそらくこの関数は、個別の年・月・日のデータから「日付のシリアル値」を求めるためにあるのだと思われます。この関数を用いると、前記のように4000年の下駄をはかせることで、西暦1900年以前の計算が連続的に可能です。紀元前2100年1月1日から西暦5999年12月31日までが連続したシリアル値として利用できます。紀元前4000年から紀元前2101年12月31日のシリアル値も存在するのですが、これは前記の理屈で紀元前2100年1月1日でリセットされ、また「1」から始まるので使えません。

センター長 | No.36 札幌西円山病院リハビリテーションセンター   2019/08/31(Sat) 19:01:21
ページトップへ