こんにちは。今回は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オブジェクトを生成することができます。以下の引数が定義されています。
- days
- seconds
- microseconds
- milliseconds
- minutes
- hours
- 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オブジェクトで取得できたことがわかりました。
以上、参考になれば幸いです。