Python

Pythonでdatetime計算(加算・減算)のやり方

Pythonで日時datetimeの計算(加算・減算)のやり方

Pythonで日付や時間の足し算、引き算をしたい場合があるが、
「Python 日付 時間 計算」
のような検索してしまうので、今回は日時(datetime)の計算方法を記載する。


日時計算が役に立つケース

日時計算が役に立つケースはいくつかある。

例えばデータをDBから取得する際に、 今日を起点に1ヶ月分 というようなデータの取得をする際に、 from 今日-30日 to 今日 という感じで範囲指定するときに日時計算が役立つ。

また複数のデータを結合する際にも、データの取得日時によっては当日同士の結合ではダメなこともあるので、 今日+1日 というような計算が必要となる。


日時の取得にはdatetimeを使う

ではまずPythonで日時を扱うにはどうすればよいか。

Pythonで日付や時間を扱う際は datetime を使う。
特定の時間を指定したい場合は引数に指定したい日時を設定する。

import datetime

# Fixed datetime
dt1 = datetime.datetime(2019,11,19)
print(dt1)
# 2019-11-19 00:00:00

現在時間を取得したい場合は now() メソッドを使うと現在の日時を取得できる。
現在を起点にデータの取得や集計をするケースは結構あるので、 now() メソッドを使う機会は多い。

# Now
dt1 = datetime.datetime.now()
print(dt1)
# 2019-11-19 22:41:03.004331


日時の計算(加算・減算)にはtimedeltaを使う

日時の取得ができるようになったら、次は取得した日時に対して計算を行う。

Pythonで日付や時間を計算する際は timedelta を使う。
datetimeに対して timedelta で指定した値を加算、減算すると計算結果が得られる。

以下のように datetime.timedelta(days=1) を足すことで1日後の日付を取得できる。

# Add day
dt2 = dt1 + datetime.timedelta(days=1)
print(dt2)
# 2019-11-20 00:00:00

days=1 の代わりに hours=1 を設定すると1時間後の時間を取得できる。

加算(+) の代わりに減算(-)を行えば1日前の日付も取得できる。
days=-1 を足しても同じ結果が得られる。

# Subtract day
dt2 = dt1 - datetime.timedelta(days=1)
print(dt2)
# 2019-11-18 00:00:00

dt2 = dt1 + datetime.timedelta(days=-1)
print(dt2)
# 2019-11-18 00:00:00


複雑な計算

datetime 複雑な計算

1日と12時間10分後 という少し複雑な計算も引数を複数指定することで可能。

# Add 1day 12hour 10minute
dt2 = dt1 + datetime.timedelta(days=1, hours=12, minutes=10)
print(dt2)
# 2019-11-20 12:10:00

他に指定できる時間単位は以下Pythonのドキュメントの通り。

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
datetime --- 基本的な日付型および時間型 — Python 3.8.0 ドキュメント

引数 単位
days
seconds
milliseconds ミリ秒
microseconds マイクロ秒
minutes
hours 時間
weeks

months(月)やyears(年)がありそうで、実は無い。
計算したい場合は日に換算して計算する必要があるが、月によって異なる日数や、うるう年などもあるので、datetimeではそこまで大きな時間単位の計算を行う想定は無いのだと思われる。


まとめ

Pythonで日時計算(加算・減算)の方法は以下の通り。

  • 日時の取得にはdatetimeを使う
  • 日時の計算(加算・減算)にはtimedeltaを使う


KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。
If you felt this article is useful, please share.
にほんブログ村 IT技術ブログへ

-Python

Translate »
Social media & sharing icons powered by UltimatelySocial

Copyright© ITips , 2020 All Rights Reserved.