mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

日数計算の方法!

[ その他 ] [ カレンダー ]

こんばんは。

A年B月C日はD年E月F日から何日経過しているのか計算したくなることがよくあると思います。

簡単なものなら表計算ソフトで関数を使用して計算すると思います。

今日は表計算ソフト等を使用せずに計算する方法を紹介します。

それは、2つの日付(グレゴリオ暦)の「修正ユリウス日」というものを計算し、それらの差を求めるというものです。 (グレゴリオ暦とは現在の日付表現方法のことです)

「ユリウス日」とは世界標準時の紀元前4713年1月1日正午からの経過日数で、日付や時刻等の暦関連の計算では必ず使用します。 「ユリウス日」では数字が大きすぎるし、正午から計算日数のため午前0時だと端数の “.5” が付いてしまうので、「ユリウス通日」から 2400000.5日 を引いた「修正ユリウス日」というものを使用します。

そこで、「修正ユリウス日」の計算方法ですが、幸いなことに計算式があります。 「フリーゲルの公式」というものです。グレゴリオ暦の西暦年・月・日から「修正ユリウス日」が計算できます。

フリーゲルの公式

1
2
3
4
5
6
「修正ユリウス日」 = floor( 365.25y )
          + floor( y / 400 )
          - floor( y / 100 )
          + floor( 30.59 ( m - 2 ) )
          + d
          - 678912

※ y:西暦年、m:月、d:日   ( 但し、1月・2月は「前年」の13月・14月とする ) ※ floor(x)とは x 以下の最大の整数を表します。 ※ 365.25 は1年の平均日数(単純に4年に1回の閏年の場合) ※ 100で割り切れる年は閏年でなく、400で割り切れる年は閏年。 ※ 30.59 は月の日数配分から巧妙に算出された定数。 ※ 「修正ユリウス日」でなく「ユリウス日」を求める場合は、-678912 に 2400000.5 を加算します。

計算例

例として、1972年1月24日 から 2011年9月22日 までの経過日数を計算してみます。
・1972年1月24日

1
2
3
4
5
6
7
8
「修正ユリウス日」 = floor( 365.25 * 1971 )
          + floor( 1971 / 400 )
          - floor( 1971 / 100 )
          + floor( 30.59 ( 13 - 2 ) )
          + 24
          - 678912
          = 719907 + 4 - 19 + 336 + 24 - 678912
          = 41340

・2011年9月22日

1
2
3
4
5
6
7
8
「修正ユリウス日」 = floor( 365.25 * 2011 )
          + floor( 2011 / 400 )
          - floor( 2011 / 100 )
          + floor( 30.59 ( 9 - 2 ) )
          + 22
          - 678912
          = 734517 + 5 - 20 + 214 + 22 - 678912
          = 55826

・経過日数

1
2
3
「経過日数」=「修正ユリウス日(2011年9月22日)」-「修正ユリウス日(1972年1月24日)」
      = 55826 - 41340
      = 14486

ということで、2011年9月22日 は 1972年1月24日 から 14486日後 となります。


「修正ユリウス日」もしくは「ユリウス日」を使用することで、さまざまな暦関連の計算が出来ます。 ※旧暦などは太陽・月と地球の位置関係(三角関数)の計算も必要になりますが。。。

以上。

Comments