【python】時間の取り扱い方について 現在時刻取得・時間の設定・時間の加算と減算【datetimeライブラリ】

2020年3月31日

時間についての取り扱いを専門としているdatetimeライブラリを紹介します。
datetimeライブラリは標準ライブラリなので追加のインストールは必要ありません。

現在時刻の取得方法

datetimeライブラリのnow関数を使用することで現在時刻の取得ができます。
一行で取得できるのでとても便利です。

使い方

import datetime
【現在時刻】 = datetime.datetime.now()

実行例

import datetime
now_time = datetime.datetime.now()

print( now_time )              #2020-03-24 23:39:45.760188
print( now_time.year )         #2020
print( now_time.month )        #3
print( now_time.day )          #24
print( now_time.hour )         #23
print( now_time.minute )       #39
print( now_time.second )       #45
print( now_time.microsecond )  #760188

now関数で取得したオブジェクトから年月日時分秒をそれぞれ取得可能です。
最小時間がマイクロ秒なので 非常に細かい時間まで知ることができます。

指定した時間をセットする方法

前述の現在時刻を取得するだけでは自由度がありません。
自分で決めた時間でオブジェクトを作成することができます。
下記では2020/3/25 10:30.45で作成を行っています。

import datetime

now_time =  datetime.datetime(2020, 3, 25, 10, 30, 45)
print( now_time )  #2020-03-25 10:30:45

時間の加算について

ある時間に対して1時間経過した時間を知りたいなど、時間を加算したいことがあると思います。
加算される元となる時間のオブジェクトは「指定した時間をセットする方法」で作成可能です。
加算する時間については datetimeライブラリのtimedelta関数を使用します。
そして加算時は+(プラス)演算子を使用します。int型やfloat型の計算方法と変わりなく計算することができます。

timedelta関数は現在の時刻(何月何日)のような絶対的な時間を持たず、時間の変化量(何時間や何分)としてを取り扱います。

timedelta関数の使用例

import datetime
【時間】= datetime.timedelta( weeks=1 , days=3, hours=4, minutes=35, seconds=15, milliseconds=333, microseconds=666)

timedelta関数は下記のキーワード引き数を入れることができます。
全て最後尾にsを付ける必要があるので注意してください。

キーワード引き数意味
weeks 週間
days
hours
minutes
seconds
milliseconds ミリ秒(ms)
microsecondsマイクロ秒(µs)

●timedelta関数について

ここでは2020/1/1に対して時間の加算を実際に試してみます。
下記のように2020/1/1で作成します。

import datetime
time =  datetime.datetime(2020, 1, 1, 0, 0, 0)

●2週間の加算

#2020/1/1 00:00.00 - 2週間
addtime = datetime.timedelta(weeks=2)
print( time - addtime )   #2019-12-18 00:00:00

●2日の加算

#2020/1/1 00:00.00 + 2日
addtime = datetime.timedelta(days=2)
print( time + addtime )   #2020-01-03 00:00:00

●25時間(1日と1時間)の加算

#2020/1/1 00:00.00 + 25時間(1日と1時間)
addtime = datetime.timedelta(hours=25)
print( time + addtime )   #2020-01-02 01:00:00

●20分45秒の加算

#2020/1/1 00:00.00 + 20分45秒
addtime = datetime.timedelta(minutes=20, seconds=45)
print( time + addtime )   #2020-01-01 00:20:45

2つ以上の引数設定でも問題ありません。

●4時間20分45秒の加算

#2020/1/1 00:00.00 + 4時間20分45秒 
addtime = datetime.timedelta(hours=4,minutes=20, seconds=45)
print( time + addtime )   #2020-01-01 04:20:45

●10日(1週間+3日) と4時間35分15秒333666マイクロ秒の加算

#2020/1/1 00:00.00 + 10日(1週間+3日) + 4:35.15.333666
addtime = datetime.timedelta( weeks=1 , days=3, hours=4, minutes=35, seconds=15, milliseconds=333, microseconds=666)
print( time + addtime )   #2020-01-11 04:35:15.333666

全ての引数を使用しています。

時間の減算について

時間の減算は-(マイナス)演算子を使用することで計算可能です。
演算子以外は加算時と変わりありません。

減算では2020/1/1を基準に計算します。

import datetime

time =  datetime.datetime(2020, 1, 1, 0, 0, 0)

●2週間の減算

#2020/1/1 00:00.00 - 2週間
addtime = datetime.timedelta(weeks=2)
print( time - addtime )   #2019-12-18 00:00:00

●2日の減算

#2020/1/1 00:00.00 - 2日
addtime = datetime.timedelta(days=2)
print( time - addtime )   #2019-12-30 00:00:00

●25時間(1日と1時間)の減算

#2020/1/1 00:00.00 - 25時間(1日と1時間)
addtime = datetime.timedelta(hours=25)
print( time - addtime )   #2019-12-30 23:00:00

●20分45秒の減算

#2020/1/1 00:00.00 - 20分45秒
addtime = datetime.timedelta(minutes=20, seconds=45)
print( time - addtime )   #2019-12-31 23:39:15

●4時間20分45秒の減算

#2020/1/1 00:00.00 - 4時間20分45秒 
addtime = datetime.timedelta(hours=4,minutes=20, seconds=45)
print( time - addtime )   #2019-12-31 19:39:15

●10日(1週間+3日) と4時間35分15秒333666マイクロ秒の減算

#2020/1/1 00:00.00 - 10日(1週間+3日) + 4:35.15.333666
addtime = datetime.timedelta( weeks=1 , days=3, hours=4, minutes=35, seconds=15, milliseconds=333, microseconds=666)
print( time - addtime )   #2019-12-21 19:24:44.666334

ループさせて時間をインクリメントする。

一定時間ごとの時間を取得したいときはループを使用し、毎回加算すれば良いです。
下記は1日ずつインクリメントさせるサンプルになります。

import datetime
time = datetime.datetime(2020, 1, 1, 0, 0, 0)

for num in range(10):
    time = time + datetime.timedelta(days=1)
    print( time )   #2020-01-02 00:00:00
                    #2020-01-03 00:00:00
                    #2020-01-04 00:00:00
                    #2020-01-05 00:00:00
                    #2020-01-06 00:00:00
                    #2020-01-07 00:00:00
                    #2020-01-08 00:00:00
                    #2020-01-09 00:00:00
                    #2020-01-10 00:00:00
                    #2020-01-11 00:00:00

ソースコードはこちらから