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
# 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)
print(d)
実行結果
19631
今日の日付、2023年10月1日を「ダレナノ」で調べると「19,631日」となるので正しいと思います。
tool.stabucky.com
ドンナヒ-1970年1月1日
修正ユリウス日
このようにモジュールを使わずに日数計算するのは大変です。
修正ユリウス日を使うと公式があるのでかなり楽になります。
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)
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日となります。
修正ユリウス日を使うと非常に簡単に計算できることが分かります。
[ 2023年10月1日 | カテゴリー: Python | タグ: 日付 ]
« 岐阜県の結婚式場で食中毒 | ロッテが2位でCS進出(2023年) »
コメントを残す