0
0

前置き

明日から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つの日付と差、間の日数を計算してみてはいかがでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0