Pythonで日数を計算する方法

Pythonで日数計算をするにはdatetimeモジュールを使いますが、これを使わずに計算する機会がありましたので、メモとして残しておきます。

コード

年月日を与えると1970年1月1日を0日目とした日数を計算して返します。

def get_days(nen, tsuki, hi):
  # 1970年1月1日を0日目として指定した年月日が何日目かを返す。
  last_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  zennen_nissu = 0
  for this_nen in range(1970, nen):
    zennen_nissu += 365
    if this_nen % 400 == 0:
      zennen_nissu += 1
    elif this_nen % 100 != 0 and this_nen % 4 == 0:
      zennen_nissu += 1
  zentsuki = tsuki - 1
  zentsuki_nissu = 0
  for this_tsuki in range(1, tsuki):
    zentsuki_nissu += last_day[this_tsuki-1]
  if tsuki > 2:
    if nen % 400 == 0:
      zentsuki_nissu += 1
    elif nen % 100 != 0 and nen % 4 == 0:
      zentsuki_nissu += 1
  nissu_all = zennen_nissu + zentsuki_nissu + hi - 1
  return nissu_all

使用例

d = get_days(2023, 10, 1)
print(d)

実行結果
19631

修正ユリウス日

このようにモジュールを使わずに日数計算するのは大変です。
修正ユリウス日を使うと公式があるのでかなり楽になります。

def mjd(y, m, d):
  if m < 3:
    m += 12
    y -= 1
  result = int(365.25 * y) + int(y / 400) - int(y / 100) + int(30.59 * (m - 2)) + d - 678912
  return result

d = mjd(2023, 10 , 1)
print(d)

実行結果
60218

1970年1月1日の修正ユリウス日MJDは40,587日なので60,218日から引くと19,631日となります。
修正ユリウス日を使うと非常に簡単に計算できることが分かります。

コメント

タイトルとURLをコピーしました