【Python】日付同士を計算する方法

この記事では、Pythonを使用して日付を扱う方法について解説します。

日付の表現方法や演算、差分の計算方法、さまざまな日付計算の応用について学びましょう。

Pythonを使って日付を操作する基本的な手法を身につけることができます。

目次から探す

日付の表現方法

Pythonにおいて日付を扱う際には、標準ライブラリのdatetimeモジュールを使用します。

このモジュールを使うことで日付を表現し、計算することができます。

以下では、日付の表現方法について詳しく見ていきます。

日付を表現するデータ型

Pythonのdatetimeモジュールでは、日付を表現するための主要なデータ型としてdate、time、datetimeが提供されています。

それぞれのデータ型は以下のように使われます。

  • date: 年、月、日の情報を持つ
  • time: 時、分、秒、マイクロ秒の情報を持つ
  • datetime: 日付と時刻の両方の情報を持つ

これらのデータ型を使用することで、日付や時刻を柔軟に扱うことができます。

日付のフォーマット指定

日付を文字列として扱う際には、特定のフォーマットで表示したいことがあります。

datetimeモジュールでは、strftime()メソッドを使用して日付を指定したフォーマットで文字列に変換することができます。

例えば、%Yは年を4桁で表すフォーマット指定子であり、%mは月を2桁で表すフォーマット指定子です。

これらの指定子を組み合わせることで、任意のフォーマットで日付を表示することが可能です。

strftime()メソッドを使用したフォーマット指定の例を示します。

import datetime

# 現在の日付を取得
today = datetime.datetime.now()

# 日付を指定したフォーマットで表示
formatted_date = today.strftime("%Y年%m月%d日")
print(formatted_date)
2024年02月14日

日付の演算

日付の演算は、Pythonのdatetimeモジュールを使用して行います。

日付の加算、減算、比較など、さまざまな操作が可能です。

日付の加算

日付に特定の日数を加算するには、timedeltaクラスを使用します。

以下は、特定の日数を加算するサンプルコードです。

from datetime import datetime, timedelta

# 現在の日付
current_date = datetime.now()

# 10日後の日付を計算
future_date = current_date + timedelta(days=10)

print("現在の日付:", current_date)
print("10日後の日付:", future_date)
現在の日付: 2024-02-14 06:58:03.474382
10日後の日付: 2024-02-24 06:58:03.474382

上記のコードでは、現在の日付に10日を加算して、10日後の日付を計算しています。

日付の減算

日付から特定の日数を減算するには、同様にtimedeltaクラスを使用します。

以下は、特定の日数を減算するサンプルコードです。

from datetime import datetime, timedelta

# 現在の日付
current_date = datetime.now()

# 5日前の日付を計算
past_date = current_date - timedelta(days=5)

print("現在の日付:", current_date)
print("5日前の日付:", past_date)
現在の日付: 2024-02-14 06:58:11.447618
5日前の日付: 2024-02-09 06:58:11.447618

上記のコードでは、現在の日付から5日を減算して、5日前の日付を計算しています。

日付の比較

日付同士を比較するには、比較演算子を使用します。

以下は、日付の比較を行うサンプルコードです。

from datetime import datetime

# 2つの日付を定義
date1 = datetime(2022, 5, 15)
date2 = datetime(2022, 5, 20)

# 日付の比較
if date1 < date2:
    print("date1はdate2よりも前の日付です")
elif date1 == date2:
    print("date1とdate2は同じ日付です")
else:
    print("date1はdate2よりも後の日付です")
date1はdate2よりも前の日付です

上記のコードでは、2つの日付を定義し、比較演算子を使用して日付同士を比較しています。

日付の差分を計算する方法

日付同士の差分を計算する方法には、日数、月数、年数などさまざまな指標があります。

Pythonを使ってそれぞれの差分を計算する方法を見ていきましょう。

日数の差分を計算する方法

日数の差分を計算するには、2つの日付を引き算することで簡単に求めることができます。

例えば、以下のように計算できます。

from datetime import date

date1 = date(2022, 9, 1)
date2 = date(2022, 9, 10)

delta = date2 - date1
print(delta.days)
9

上記の例では、date1date2の日数の差分を計算しています。

月数の差分を計算する方法

月数の差分を計算する場合、通常の引き算だけではうまくいかないことがあります。

そのため、dateutilモジュールを使用すると便利です。

from datetime import date
from dateutil.relativedelta import relativedelta

date1 = date(2022, 9, 1)
date2 = date(2023, 3, 1)

delta = relativedelta(date2, date1)
months_diff = delta.years * 12 + delta.months
print(months_diff)
6

上記の例では、date1date2の月数の差分を計算しています。

年数の差分を計算する方法

年数の差分を計算する場合も、dateutilモジュールを使用すると便利です。

from datetime import date
from dateutil.relativedelta import relativedelta

date1 = date(2020, 1, 1)
date2 = date(2023, 1, 1)

delta = relativedelta(date2, date1)
years_diff = delta.years
print(years_diff)
3

上記の例では、date1date2の年数の差分を計算しています。

これで、日付の差分を計算する方法について理解できました。

さまざまな日付計算を行う際に活用してみてください。

さまざまな日付計算の応用

曜日の計算

Pythonを使用して、特定の日付の曜日を計算することができます。

以下は、datetimeモジュールを使用して曜日を求めるサンプルコードです。

import datetime

# 日付を指定
year = 2023
month = 9
day = 15

# 曜日を計算
date = datetime.date(year, month, day)
day_of_week = date.strftime("%A")

print(f"{year}年{month}月{day}日は{day_of_week}曜日です。")
2023年9月15日はFriday曜日です。

上記のコードを実行すると、指定した日付の曜日が出力されます。

月初めや月末の計算

Pythonを使用して、特定の月の初めや月末を計算することもできます。

以下は、calendarモジュールを使用して月初めと月末を求めるサンプルコードです。

import calendar

# 月と年を指定
year = 2023
month = 9

# 月初めを計算
first_day = calendar.monthrange(year, month)[0]
print(f"{year}年{month}月の初めは{first_day + 1}日です。")

# 月末を計算
last_day = calendar.monthrange(year, month)[1]
print(f"{year}年{month}月の末日は{last_day}日です。")
2023年9月の初めは5日です。
2023年9月の末日は30日です。

上記のコードを実行すると、指定した月の初めと末日が出力されます。

特定の日数後の日付の計算

Pythonを使用して、特定の日数後の日付を計算することも可能です。

以下は、timedeltaを使用して指定した日数後の日付を求めるサンプルコードです。

import datetime

# 日付を指定
start_date = datetime.date(2023, 9, 15)
days_to_add = 30

# 指定した日数後の日付を計算
end_date = start_date + datetime.timedelta(days=days_to_add)

print(f"{start_date}から{days_to_add}日後は{end_date}です。")
2023-09-15から30日後は2023-10-15です。

上記のコードを実行すると、指定した日数後の日付が出力されます。

目次から探す