#101 時を計算する(前編)

2000/01/25

<前目次次>


 2000年問題を引き合いに出すまでも無く、コンピュータにおいても「時」を扱う場面は非常に多い。

 そもそも時の単位は非常にややこしい。自然科学において、時を表す基本単位は「秒」であるが、その上の単位である分時日月年は、どれ一つとっても10進法に従っていない。従って、ある時刻を年月日時分秒で表したり、それらの差を計算することはやや面倒な処理を要する。

 時分秒まではまだ良い。60秒は1分であり、60分は1時間であり、24時間は1日である。60・60・24などという、切りの悪い繰り上がり方をするが、一応規則正しく繰り上がるので、掛けたり割ったりすれば相互に単位の交換は可能である。

 しかし年月日の場合は面倒だ。1ヵ月の長さは月によって28日であったり31日であったりするし、年の長さも365日の場合と366日の場合がある。もともと1日は地球が太陽に対し自ら1回転する周期、1月は月が地球の周りを1周する周期、1年は地球が太陽の周りを1周する周期をもとに定められたものであるが、これらがてんでばらばらなのだから、相互の関係が切りよく整数倍に揃うはずがない。

 年の場合、1年の長さを平均太陽日で表すと365.2422日となる。この端数を調整するために1日を加え1年が366日になった年がうるう年だ。現在の西暦の前に使われていたユリウス暦では規則的に4年に一度うるう年が挿まっていたが、0.2422×4=0.9688日になり、4年ごとに0.0312日分足し過ぎることになってしまう。400年たてば3日ほどずれる計算になり、何千年もたつとだんだん季節とのずれが生じてしまった。そこでこれを更に修正するために、400年に3回更に例外を設け、100で割り切れるが400で割り切れない年はうるう年とはしないことにした。これがグレゴリウス暦と呼ばれるもので、現在では世界の多くの地域でこの暦を採用している。ちなみに、ユリウス暦からグレゴリウス暦に改められた1582年は、改正の影響で10月4日の次が10月15日ということになっている。

 ということで、今年2000年はうるう年なのかどうかと言うと、2000は4でも100でも400でも割り切れるため、うるう年となるのである。結果として1901年から2099年までは、ユリウス暦と同様、4年に一度規則正しくうるう年があると考えればよい。現在生きている人のほとんどはこの期間に自分の一生が含まれているはずであるから、その範囲のことに関する限り、100年に一度云々という規則は、結果的には憶えていなくても全然差し支えない

 しかし、このグレゴリウス暦によるうるう年の規則をきちんと憶えていなかったせいか、憶えていても混乱してしまったためか、コンピュータのプログラムの中には今年がうるう年であることを失念しているものも存在するらしい。これが第2の2000年問題とも言われる「2000年2月29日問題」である。本来の「2000年1月1日問題」は、データの構造上やむを得ず西暦表示を2桁にしていたなどの事情もあるかも知れないが、こちらの場合は明らかに西暦を4桁で扱い、「100年に一度のうるう年でない例外」を知識として持っていながら、その知識が中途半端であったために間違えてしまっているのであるから、プログラマとしては相当に恥ずかしいミスである。

 一方、1ヵ月の日数は、月によって31日あったりそれ未満であったりとまちまちになっている。日本では1ヵ月が31日ある月を「大の月」、それに満たない月を「小の月」と言い、何月が小の月であったかを憶える言葉として「西向く侍」というものがある。「ニシムクサムライ」の読みに漢字を当てると「二四六九士」となり、小の月が2月・4月・6月・9月・11月ということがわかるというわけだ。いずれにせよ、こうでもして憶えておかないとわからなくなるほど暦はややこしい。

 更に我々は、日常の暦の上で「七曜」というものを用いている。例えば多くの会社や学校が日曜を休日としているように、「七曜」は生活のリズムを刻むものとして、我々の日常に深く根差しているものである。しかしこちらの方は、年や月とは関係なく規則正しく7日周期で繰り返しているために、年月日との対応が一筋縄ではいかない。

 といったことを踏まえて、次回ではコンピュータによるグレゴリウス暦の計算方法の一例を紹介する。


<前目次次>