stabucky blog

1900年1月1日は何曜日か

前回の続きです。
ところで1900年1月1日は何曜日かというのを計算してみます。
計算しなくてもExcelを使えば一発です。
というのは浅はかでした。
なんとExcelには日付計算に欠陥があるのです。
以前、Excelのヘルプに「あえてそうしている」というようなことが書かれていたような気がするので、バグとは言えないのかもしれませんが、とにかく正しくない部分があります。

1900/2/27 Mon
1900/2/28 Tue
1900/2/29 Wed
1900/3/1 Thu
1900/3/2 Fri

Excelで表示すると、1900年2月末前後がこのようになります。
どこがおかしいかというと2月29日が存在するのです。
閏年のルールでは、年が4で割り切れる場合には閏年となる、つまり2月29日が存在するが、年が100で割り切れる場合には閏年にしない、となっています。
つまり2月29日は存在しないのが正しいのです。

Excelで計算すると、1900年1月1日は日曜日となりますが、正しくは、1900年1月1日は月曜日のようです。

Excelを使わずに計算するには修正ユリウス日というのを使うとよいようです。
これはある日付(1858年11月17日)からの経過日数を求めるもので、公式に当てはめれば電卓でも計算できます。

ユリウス通日 - Wikipedia

これにしたがって計算すると1900年1月1日は15020日になります。
今日(2006年2月5日)は53771日ですから、1900年1月1日は38751日前になります。
38751を7で割るとあまりが6になります。
今日は日曜日ですから、今日から6日前は月曜日。
ということでやはり1900年1月1日は月曜日です。

最後に修正ユリウス日をExcelのVBAで計算する関数を載せておきます。

Function mjd(nen, tsuki, hi)
  If tsuki <= 2 Then
    nen = nen - 1
    tsuki = tsuki + 12
  End If
  mjd = Int(365.25 * nen) + Int(nen / 400) - Int(nen / 100) _
    + Int(30.59 * (tsuki - 2)) + hi - 678912
End Function

関連記事

[2006-02-05]

豆知識