Python Code Notes

Information by python engineer

datetimeモジュール 日時を取得・計算する方法 Python

f:id:vigilantPotato:20190610222616p:plain

Pythonのdatetimeモジュールを用いて日時データを取得し、計算する方法をまとめました。

処理にかかる時間の計測やプログラムの一時停止には、timeモジュールの方が便利なので、以下の記事も参照してください。

目次

datetimeモジュール

datetimeモジュールは、日時の取得や計算をするためのモジュールで、特に日付の計算に非常に便利なモジュールです。

モジュールのインポート

datetimeモジュールは組み込みモジュールのため、インストールは不要です。

例:モジュールのインポート

import datetime

日時をdatetime型で取得

datetime型とは

datetime型は年、月、日、時、分、秒、マイクロ秒の値が格納されたオブジェクトで、対応する属性を用いて値を取得することができます。

各属性名と内容を下表に示します。これらは、キーワード引数も兼ねます。

属性名 内容
year
month
day
hour
minute
second
microsecond マイクロ秒

datetime関数に上表の各属性値を渡すことで、datetimeオブジェクトを生成することができます。年月日は必須の引数となり、入力しない属性は0になります。

例:2019年6月10日を示すdatetimeオブジェクトを生成

import datetime

dt = datetime.datetime(2019, 6, 10)
print(dt)

出力:2019-06-10 00:00:00

現在の日時をdatetime型で取得

現在の日時をdatetime型で取得するには、datetime.now関数を使用します。datetime.now関数は、コンピュータの時計が示す現在の日時をdatetimeオブジェクトで返します。

例:現在の日時を取得し、年、時、秒を表示

import datetime

dt = datetime.datetime.now()
print(dt.year)
print(dt.hour)
print(dt.second)

出力:

2019
23
47

エポック秒からdatetime型に変換

エポック秒をdatetime型に変換するには、datetime.fromtimestamp関数を使用します。

例:現在のエポック秒をdatetime型に変換し、年、時、秒を表示

import time, datetime

dt = datetime.datetime.fromtimestamp(time.time())
print(dt.year)
print(dt.hour)
print(dt.second)

出力:

2019
23
31

datetimeオブジェクトの演算

datetimeオブジェクトは、比較演算子を用いて比較をすることが可能です。

日時の前後を判定するのに便利です。

例:2019年1月1日と2019年6月10日を比較

import datetime

dt1 = datetime.datetime(2019, 1, 1)
dt2 = datetime.datetime(2019, 6, 10)

print(dt1 > dt2)
print(dt1 < dt2)

出力:

True
False

期間をtimedelta型で取得

timedelta型とは

timedelta型は期間を示すオブジェクトで、deltatime.timedelta関数を用いて生成することができます。

キーワード引数にweeks、days、hours、minutes、seconds、milliseconds、microsecondsをとり、また、属性値としてdays(日数)、seconds(秒数)、microseconds(マイクロ秒数)を持ちます。

例:3日と10時間30分21秒を表すtimedeltaオブジェクトを生成

import datatime

td = datetime.timedelta(days=3, hours=10, minutes=30, seconds=21)
print(td)

出力:3 days, 10:30:21


さらに、total_secondsメソッドを用いれば、期間を秒数のみで出力することができます。

例:3日と10時間30分21秒の秒数を表示

import datatime

td = datetime.timedelta(days=3, hours=10, minutes=30, seconds=21)
print(td.total_seconds())

出力:297021.0

timedelta型で日付計算

timedeltaオブジェクトを用いると、日付の計算が非常に簡単に行えます。

datetimeオブジェクトにtimedeltaオブジェクトを加算(減算)することで、datetimeオブジェクトの日時からtimedeltaオブジェクトの期間後(前)の日付を取得できます。

例:現在から500日後の日時を取得

import datetime

dt = datetime.datetime.now()
td = datetime.timedelta(days=500)
print(dt + td)

出力:2020-10-27 00:01:37.470817