java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

Python | 日付に経過時間を加算・減算する

投稿日:

最終更新日:2023年05月06日

アイキャッチ

こんにちは。今回はPythonについての記事です。

Pythonにはdatetimeモジュールが用意されています。このモジュールでは日付を扱うdate型や経過時間(日付の差)を扱うtimedelta型が定義されています。

今回の記事では最初にdate型オブジェクト、timedelta型オブジェクトの簡単な説明を書きました。そのあと、日付の加算・減算をするサンプルを書きました。最後に補足として、日付の差について書きました。

dateオブジェクトの基本的な説明

datetimeモジュールでは、date型が用意されています。この型では、年月日を扱うことができます。

date(year, month, day)メソッドを呼び出すことで、指定した年月日を保持するdate型オブジェクトを生成することができます。

なお、date.today()メソッドを呼び出すと、現在の年月日を保持するオブジェクトが作られます。

上記で作られたオブジェクトの年、月、日それぞれは、属性year、month、dayに格納されています。

以下は、年、月、日を出力する簡単なサンプルです。

ソース

from datetime import date

# (1)
print('date()を使用')
my_obj = date(2001, 9, 8)

print(my_obj.year)
print(my_obj.month)
print(my_obj.day)

print('------------------------')

# (2)
print('date.today()を使用')
my_obj = date.today()

print(my_obj.year)
print(my_obj.month)
print(my_obj.day)

結果

date()を使用
2001
9
8
------------------------
date.today()を使用
2023
5
6

(1)では、date()でdateオブジェクトを生成しています。すぐ下の行で、属性year、month、dayそれぞれの値を出力しています。

(2)では、date.today()でdateオブジェクトを生成しています。この場合、プログラムを実行したときの日付が格納されます。

timedeltaオブジェクトの基本的な説明

datetimeモジュールでは、timedelta型が用意されています。この型では経過時間を保持できます。

datetime.timedelta()メソッドで、timedeltaオブジェクトを生成することができます。以下の引数が定義されています。

  1. days
  2. seconds
  3. microseconds
  4. milliseconds
  5. minutes
  6. hours
  7. weeks

それぞれ、初期値は0です。上記引数は一度に全部指定する必要はありません。

以下のサンプルでは、上記の引数をそれぞれひとつずつ使って値を出力しています。

ソース

from datetime import timedelta

print('(1)')
delta = timedelta(days=10)
print(delta)

print('(2)')
delta = timedelta(seconds=20)
print(delta)

print('(3)')
delta = timedelta(microseconds=30)
print(delta)

print('(4)')
delta = timedelta(milliseconds=31)
print(delta)

print('(5)')
delta = timedelta(minutes=1)
print(delta)

print('(6)')
delta = timedelta(hours=2)
print(delta)

print('(7)')
delta = timedelta(weeks=3)
print(delta)

結果

(1)
10 days, 0:00:00
(2)
0:00:20
(3)
0:00:00.000030
(4)
0:00:00.031000
(5)
0:01:00
(6)
2:00:00
(7)
21 days, 0:00:00

(1)では、daysの値を指定しています。この引数では、日数を指定できます。

(2)では、secondsを指定しています。この引数では、秒数を指定できます。

(3)では、microsecondsを指定しています。この引数では、100万分の1秒の単位で経過時間を指定できます。

(4)では、millisecondsを指定しています。この引数では、ミリ秒の単位で経過時間を指定できます。

(5)では、minutesを指定しています。この引数では、分の単位で経過時間を指定できます。

(6)では、hoursを指定しています。この引数では、時の単位で経過時間を指定できます。

日付に経過時間を加算・減算

dateオブジェクトに対して、timedeltaオブジェクトを足したり引いたりできます。

以下では、加算と減算を実行しています。

ソース

from datetime import date
from datetime import timedelta

date = date(2001, 9, 8)
days = timedelta(days=9)
print('基準日')
print(date)

print('(1)')
print(date + days)

print('(2)')
print(date - days)

結果

基準日
2001-09-08
(1)
2001-09-17
(2)
2001-08-30

上記サンプルでは、変数dateに日付を設定し、変数daysに経過時間9日を設定しています。

(1)ではdateにdaysを加算しています。(2)ではdateにdaysを減算しています。

結果を見ると、それぞれ、日付に経過時間9日の分だけ加算・減算されたことがわかります。

補足:日付の差

dateオブジェクト同士を足したり引いたりできます。以下のサンプルでは日付の差を計算しています。

ソース

from datetime import date

date1 = date(2001, 4, 1)

date2 = date(2001, 5, 1)

t = date2 - date1

print('変数の型')
print(type(t))

print('内容')
print(t)

結果

変数の型

内容
30 days, 0:00:00

上記では、変数date1とdate2にdateオブジェクトを格納しています。

変数tに変数date1とdate2の日付の差を格納しています。

type()は組み込み関数です。引数に渡された変数の型が取得できます。出力結果を見ると、演算子「-」によって、date1とdate2の日付の差がtimedeltaオブジェクトで取得できたことがわかりました。

以上、参考になれば幸いです。