趣味

 ユリウス日(Julian Day)

 ユリウス日(ユリウス通日)とは紀元前4713年1月1日からの連続した通し番号の日数で す。ちなみに、2000年1月1日は、起点の日から2,451,545日目に当た ります。

 通常の暦には不連続な部分があるので、ユリウス日のように連続性を保った絶対的 な日付があると便利です。

 正確にいうと、ユリウス日の起算開始日は紀元前4713年1月1日からですが、起算開始の時刻は 同日の0時からでなく12時からなのです。そこで起算開始の紀元前4713年1月1日正午が ユリウス日の0.0日になります。同日の夜の12時(24時)はユリウス日の0.5日です。翌日の正午は ユリウス日の1.0日です。
 2000年1月1日の0時はユリウス日の2451544.5日で、同日の正午がユリウス日の2451545日 です。

 さらに正確にいうと、使用している時刻は世界時を使っています。 日本標準時は世界時よりも9時間進んでいるので日本を基準に考えると2000年1月1日21時が ユリウス日の2,451,545日になります。  なお、ユリウス日が提案された1638年頃の正午の定義は現在の正午(世界時)の定義と違 います。

 最初に気がつく暦の不連続性は紀元前の年号と紀元後の年号です。紀元前4713年は-4713年 になりません。  紀元前(BC)4713年は、西暦(整数列)換算で-4712年になります。 西暦(AD)を考えたころヨーロッパにはゼロの概念が無かったからです。
....,3BC,2BC,1BC,1AD,2AD,3AD,.....のように不連続になっています。

 紀元前(BC)の年号を赤色の数列で示し、紀元後(AD)を青色の数列で示すと次のように なります。

             BC                      AD 
....  4713 .....  3  2  1  1  2  3 ....... 2000 ....
.... -4712 ..... -2 -1  0  1  2  3 ....... 2000 ....

そこで、上記の数列の関係 AD = 1 - BC より AD = 1 - 4713 = -4712 となるわけです。

 次の不連続性は、ユリウス暦(ユリウス日とは関係ない)からグレゴリオ暦に 変更したときの後遺症です。どのように変更したかというと 1582年10月4日の翌日を5日でなく15日にしたのです。 1582年10月の日付の順番を 1, 2, 3, 4, 15, 16, 17, .....のように不連続な ものにしたのです。ただし、曜日は連続しています。
 ユリウス日を対応づければ、この不連続性は解消します。1582年10月4日のユリウス日は 2299160日です。そして1582年10月15日のユリウス日は2299161日です。

 ローマ・カトリック系のイタリア、フランス、イスパニア(スペイン)、ポルトガル、 ポーランドの国々は1582年にグレゴリオ暦を採用しました。また、その他のローマ・カトリック 系の国々も数年遅れで採用しました。
 しかしながら、主にプロテスタント系およびその他の国々では、グレゴリオ暦への変更 が大分遅れました。イギリスは1752年、中国は1912年、ソ連(ロシア)は1918年、 トルコは1927年です。
UNIX(Linux)などでカレンダーのオンライン・マニュアルを参照(man cal)する と「グレゴリオ暦への切り替えが1752年9月3日に行われた」としています。


 そこで、cal 9 1752 を実行すると

    September 1752
     S  M Tu  W Th  F  S
           1  2 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30

のように1752年9月のカレンダーが表示されます。

 同様にこのような国の暦もユリウス日に対応づければ、この不連続性は解消します。
1752年9月14日のユリウス日は2361222日なので、1752年9月2日のユリウス日 は2361221日になります。

 現在ではユリウス日(Julian Day; JD)の数値が大きすぎるので、 ユリウス日から2400000日と半日(12時間)を引いた準(修整)ユリウ ス日(Modified Julian Day; MJD)をつかうことがあります。

 準ユリウス日(MJD)とユリウス日(JD)の関係は次のようになります。

 MJD = JD − 2400000.5

 準ユリウス日の0.0日は、1858年11月17日0時になります。 つまり、準ユリウス日の起算開始日は1858年11月17日で、起算開始時刻はその日の 0時(世界時)です。
 2000年1月1日の0時はユリウス日の2451544.5日なので、準ユリウス日は51544日 になります。
 西暦(y年m月d日)から準ユリウス日(MJD)に変換する式はフリーゲルの公式を使って 次のようになります。(マイコン宇宙講座より)


   y は年、m は月、d は日です。

  1月と2月は前の年を基準に計算するため、
  m = m + 12、y = y - 1 とします。

  また、int[ ]は数値の整数化でなく、
    整数部を求めることを意味しています。
  たとえば、int[1.3] は 1 になります。
    また、int[-1.3] も -1 になります。

   MJD = int[365.25 * y] + int[y / 400] - int[y / 100]
         + int[30.59 * (m - 2)] + d - 678912   

 この変換式で2000年1月1日正午の準ユリウス日を計算してみます。
  2000年1月1日正午は、y = 2000 - 1、 m = 1 + 12、d = 1 と 正午までの 12時間になります。
時間はすべて d にいれます。12時間は半日すなわち0.5日です。
そこで、y, m, d を整理すると、y = 1999, m = 13, d = 1.5 のようになります。
これを変換式に代入します。


  MJD = int[365.25 * 1999] + int[1999 / 400] - int[1999 / 100]
        + int[30.59 * (13 - 2)] + 1.5 - 678912

      = int[730134.75] + [4.9975] - int[19.99]
        + int[336.49] - 678910.5

      = 730134 + 4 - 19 + 336 - 678910.5

      = 51544.5

 上式より、2000年1月1日正午の準ユリウス日が 51544.5日として求まりました。 ユリウス日にする場合は、2400000.5 を足せばよいので、2451545日になります。

 グレゴリオ暦採用以前のユリウス暦の年月日を準ユリウス日に変換するのは簡単ですが、 れいのBCとADの不連続性のため次のような二通りになります。


 紀元前(BC; y < 0)のとき、
 MJD = int[365.25 * y] + int[30.59 * (m - 2)] + d - 678915
   
  紀元後(AD; y = 0 および y > 0)のとき
 MJD = int[365.25 * y] + int[30.59 * (m - 2)] + d - 678914

 こんどは、ユリウス日の開始日の紀元前4713年(-4712年)1月1日正午の 準ユリウス日を計算してみます。


 y = -4712 - 1, m = 1 + 12, d = 1 + 0.5 を整理して

  y = -4713, m = 13, d = 1.5 を式に代入すると

  MJD = int[365.25 * -4713] + int[30.59 * (13 - 2)] + 1.5 - 678915

      = int[-1721423.25] + int[336.49] - 678913.5
 
      = -1721423 + 336 - 678913.5

      = -2400000.5
 

 紀元前4713年1月1日正午の準ユリウス日は-2400000.5日として求まりました。 これをユリウス日にするには2400000.5を足せばよいので、0.0日となります。 準ユリウス日の-2400000.5日とは、1858年11月17日0時からの日付を逆にたどって 240万日と12時間前の日にちになります。

趣味

世界時

 世界時(Universal Time; UT)は地球の自転周期(約23時間56分4秒)をもとに計算した時刻 です。世界時は東経0度を基準にするので東経135度を基準にする日本標準時(Japanese Standard Time; JST)は9時間進んでいます。

        UT = JST - 9時間

 なぜなら、 360度 / 24時間 = 15度 / 1時間; 135/15 = 9 
 なお、天体暦では水晶時計や原子時計の使用によって地球の自転速度が一定でないことが 分かってからは、地球が太陽の周りを公転する周期から計算する時刻を使うようになりました。 これは地球の自転周期よりも、地球の太陽に対する公転周期の平均値のほうが安定しているから です。この時系は暦表時(Ephemeris Time; ET)とよばれ1960年頃から使うようになりました。
 なお、1984年頃から世界の天体暦は暦表時なく力学時(Dynamical Time; TD)を使う ようになってきました。
    ET = UT + 儺

    儺は、天体観測で求めます。
 現在の日常の時報は協定世界時(Coordinated Universal Time; UTC)を使っています。 これは原子時計で計る時刻です。協定世界時の1秒は原子時の1秒ですが地球自転の恒星時 から計算で決まる世界時との差が0.9秒以内におさまるように「うるう秒」をもうけています。
 そこで、現在の日本標準時と協定世界時も次のような関係を持っています。
       JST = UTC + 9時間
 

クリックした所へ戻る
暦の変更

 ローマ皇帝ジュリアス・シーザー(Julius Caesar; ユリウス・カエサル)の制定した ユリウス暦は太陽年(1回帰年)を365.25日として、これに基づいて平年を365日としました。 そして毎年0.25日すなわち1/4日分たまるので、4年目に1日分増やして「うるう年」 としました。
 実際の太陽年(1回帰年)は約365.2422日でしたので、ユリウス暦は毎年0.25と約0.2422の 差である約0.0078日を余分に与えていたことになります。これは時間に換算すると 約11分15秒であり、暦のうえでは毎年約11分15秒早く日付を決めることになります。 これが積もり積もって16世紀の終わりには約10日になりました。この約10日早い日にちを 調整するためにローマ法王グレゴリオ13世は1582年10月4日をユリウス暦最終日として、 その翌日を15日にすることを布告しました。そこで1582年10月15日がグレゴリオ暦初日と なったのです。なお、この布告は教書のかたちで1582年2月24日に発表されたということ です。

 実際のローマ法王グレゴリオ13世の布告は次のようなものでした。

(1)3月21日を春分の日とするために、1582年10月4日の次の日を10月15日とする。
(2)太陽年と暦の1年がより正確に一致するように西暦年数が4で割れる年を閏(うるう) とする。ただし、100で割れて400で割れない年は平年とする。(理科年表読本より)

 布告の(1)で春分の日にこだわっているのは、イースター(復活際)の日取りを決める ためです。イースターは春分の日かそれ以後に、最初に満月になった日以後の最初の日曜日 と決められています。そして、春分の日とは325年にニケア(ニカイア)で開かれた宗教会議 で教会暦の3月21日であったのが、上記の理由で3月11日になってしまったという事情 があったのです。なお、教会暦とはユリウス暦とユダヤ暦(太陰太陽暦)を結合したものだと いわれています。

 布告の(2)は分かりにくいので、次のように四つの条件に分けてみます。

 A. 4で割り切れない年はうるう年でない。
  B. 4で割り切れる年はうるう年である。
  C. 100で割り切れる年はうるう年でない。 
  D. 400で割り切れる年はうるう年である。
 このA, B, C, Dの条件は、その組み合わせを誤解することがあります。  西暦2000年はCの条件から100で割り切れるのでうるう年でないようですが、 Dの条件なら400で割り切れるのでうるう年のようです。
 実はD, C, B, A の順に条件を適用していくのです。割り算をして割り切れると いうことは余りがゼロだということです。これを判断条件としたプログラムで布告(2) を表現すると次のようになります。なお、プログラム言語には余りを求める演算子 として、mod とか % があります。
  Lisp で表現すると次のようになります。
  
 (cond (((zerop (mod year 400)) 'うるう年である)
         ((zerop (mod year 100)) 'うるう年でない)
         ((zerop (mod year   4)) 'うるう年である)
         (t                      'うるう年でない)))

  C, Perl, Java系統の言語で表現すると次のようになります。

 if ($year % 400 == 0) {
     print("うるう年である");
  } elseif ($year % 100 == 0) {
     print("うるう年でない");
 } elseif ($year % 4 == 0) {
     print("うるう年である");
  } else {
     print("うるう年でない");
  }
  条件Aと条件Bはユリウス暦で採用されていました。しかしながらこれでは潜在的に 日にちを増やしているので条件Cで約100年毎に1日分減らすわけです。しかしこの条件 では少し日にちを減らしすぎる傾向があるので条件Dで400年毎に1日分増やすようにし ているのです。これらの条件でおよそ三千年は有効な暦になるようです。

クリックした所へ戻る
int[-1.3] も -1

 プログラミングにおけるint[ ]関数をそのまま使うと、 int[-1.3]は整数化を意味するので -2 になったしまいます。(床関数)

      数直線
        |
        |
        |<― 1.3 (床1に整数化)
        |
      1 ―床
        |
        |
        |
        |
      0 ―床
        |
        |
        |
        |
     -1 ―床
        |     
        |<― -1.3 (床-2に整数化)
        |
        |
     -2 ―床
        |
        |
        |
 そこで、MJD の変換式をプログラムするときは、int[-1.3] などを -int[1.3]のようにしてから計算する必要があります。

 Common Lispなどではtruncateを使えるので最初の返り値を採用すればよいことになります。

(truncate 1.3) ==> 1
(truncate -1.3) ==> -1

クリックした所へ戻る

占星術の目次へ戻る

ホームに戻る