前置き
明日から7月に入り、2024年も日数的には折り返し点になる。そこで、今日はPythonで、日数が計算できるプログラムコードの作成に着手してみた。
プログラムコード
from datetime import datetime
# ユーザーからの日付入力を取得する関数
def get_date_input(prompt):
while True:
try:
date_str = input(prompt)
# 日付フォーマットは"YYYY-MM-DD"を使用
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
return date_obj
except ValueError:
print("日付の形式が正しくありません。再度入力してください。")
# 2つの日付の間の日数を計算する関数
def calculate_days_between_dates(date1, date2):
delta = date2 - date1
return abs(delta.days)
# メイン関数
def main():
print("2つの日付の間の日数を計算します。")
date1 = get_date_input("最初の日付を入力してください(例: 2023-01-01): ")
date2 = get_date_input("2つ目の日付を入力してください(例: 2023-12-31): ")
days_between = calculate_days_between_dates(date1, date2)
print(f"{date1.strftime('%Y-%m-%d')} と {date2.strftime('%Y-%m-%d')} の間の日数は {days_between} 日です。")
if __name__ == "__main__":
main()
プログラムコードの説明
このプログラムは、ユーザーに2つの日付を "YYYY-MM-DD" 形式で入力させ、その間の日数を計算して出力します。 datetime モジュールを使用して日付の操作を行っています。
出力結果
2つの日付の間の日数を計算します。
最初の日付を入力してください(例: 2023-01-01): 2023-01-01
2つ目の日付を入力してください(例: 2023-12-31): 2023-12-31
2023-01-01 と 2023-12-31 の間の日数は 364 日です。
2つの日付の間の日数を計算します。
最初の日付を入力してください(例: 2023-01-01): 2020-01-01
2つ目の日付を入力してください(例: 2023-12-31): 2020-12-31
2020-01-01 と 2020-12-31 の間の日数は 365 日です。
ちゃんとこのように、2023年(昨年)は平年でしたので、間の日数は364日。
今年同様、2020年はうるう年でしたので、間の日数は365日と出力されている。
しかし、2023年は日数が365日、2020年は日数が366日なのに、なんでそのように出力されないのだろうかと疑問に思った。そこで、私は、ユーザーが、2つの日付を入力したら、その日付の差と何日間になるか、両方出力するコードに改良した。
改良したプログラムコード
from datetime import datetime, timedelta
# ユーザーからの日付入力を取得する関数
def get_date_input(prompt):
while True:
try:
date_str = input(prompt)
# 日付フォーマットは"YYYY-MM-DD"を使用
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
return date_obj
except ValueError:
print("日付の形式が正しくありません。再度入力してください。")
# 2つの日付の間の日数を計算する関数
def calculate_days(date1, date2):
delta = date2 - date1
days_difference = abs(delta.days)
days_inclusive = days_difference + 1 # 開始日と終了日を含む場合
return days_difference, days_inclusive
# メイン関数
def main():
print("日付の間の日数を計算します。")
date1 = get_date_input("最初の日付を入力してください(例: 2023-01-01): ")
date2 = get_date_input("2つ目の日付を入力してください(例: 2023-12-31): ")
days_difference, days_inclusive = calculate_days(date1, date2)
print(f"{date1.strftime('%Y-%m-%d')} と {date2.strftime('%Y-%m-%d')} の間の差は {days_difference} 日です。")
print(f"{date1.strftime('%Y-%m-%d')} と {date2.strftime('%Y-%m-%d')} の間は {days_inclusive} 日間です。")
if __name__ == "__main__":
main()
オリジナルコード(何日間と何日違い)との相違点
何日間とは、開始日と終了日を含む期間の日数です。
計算方法は、終了日と開始日を引いた差の日数に1を足します。
例えば、2024年1月1日から1月5日は、5日間になります。
ここでは、何日間をdays_inclusiveとして定義しています。
プログラムコードの計算式:days_inclusive = days_difference + 1
何日違いとは、開始日と終了日の間の差の日数です。
例えば、2024年1月7日から1月11日は、4日違いになります。
ここでは、何日違いをdays_differenceとして定義しています。
プログラムコードの計算式:days_difference = abs((date2 - date1).days)
出力結果
日付の間の日数を計算します。
最初の日付を入力してください(例: 2023-01-01): 2024-01-01
2つ目の日付を入力してください(例: 2023-12-31): 2024-12-31
2024-01-01 と 2024-12-31 の間の差は 365 日です。
2024-01-01 と 2024-12-31 の間は 366 日間です。
日付の間の日数を計算します。
最初の日付を入力してください(例: 2023-01-01): 2021-01-01
2つ目の日付を入力してください(例: 2023-12-31): 2021-12-31
2021-01-01 と 2021-12-31 の間の差は 364 日です。
2021-01-01 と 2021-12-31 の間は 365 日間です。
今年2024年は4年に1回のうるう年なので366日間、差は365日
平年だった2021年に関しては、365日間、差が364日と表示されている。
皆さんも時間がある時にこのプログラムコードを参考にして、2つの日付と差、間の日数を計算してみてはいかがでしょうか。