ライブラリ

日付を扱うライブラリの使い方 (datetime、time)

日付を扱うライブラリ

Pythonで日付を扱いたい場合はdatetimeやtimeライブラリを使うと便利です。

ここでは日付を扱うライブラリを解説します。

datetimeライブラリの使い方

まずはdatetimeライブラリから見ていきましょう。

datetimeは日時を扱うためのライブラリで、日時の取得や曜日の取得、日時の比較や文字列変換などが可能です。

現在の日時を取得する

現在の日時を取得するにはdatetime.now()を使います。

import datetime as d
print(d.datetime.now())

[出力結果]

2020-03-10 10:34:31.318888

結果の通り、datetime.now()ではマイクロ秒まで取得できます。

なお、この結果は文字列ではなく、datetimeというクラスであることに注意してください。datetime.now()で取得した日時と文字列はそのままでは比較できません。比較する場合は日時⇔文字列の変換が必要です(後述します)。

import datetime as d
d_time = d.datetime.now()
print(type(d_time))

[出力結果]

<class 'datetime.datetime'>

指定した日時を取得する

現在の日時ではなく、指定した日時を取得したい場合はdatetime()に年月日時分秒の引数を渡します。

import datetime as d
print(d.datetime(2020, 7, 24, 12, 34, 56, 999999))

[出力結果]

2020-07-24 12:34:56.999999

日時の必要な要素だけ取得する

日時の要素を分解して取得してみましょう。

必要な要素を取得するには、各要素のメンバにアクセスします。

import datetime as d
now = d.datetime.now()
print("年:{0}".format(now.year))
print("月:{0}".format(now.month))
print("日:{0}".format(now.day))
print("時:{0}".format(now.hour))
print("分:{0}".format(now.minute))
print("秒:{0}".format(now.second))
print("マイクロ秒:{0}".format(now.microsecond))

[出力結果]

年:2020
月:3
日:10
時:10
分:54
秒:30
マイクロ秒:256160

曜日を取得する

曜日を取得するにはweekday()を使います。

weekday()を使うと0〜6の数値が取得できます。0が月曜、1が火曜、2が水曜...と、月曜から順番にそれぞれの数値と曜日が紐づいています。

次のコードではweekday()で取得した数値から曜日の名称を取得しています。

import datetime as d

week_name = {
      0:"月曜"
    , 1:"火曜"
    , 2:"水曜"
    , 3:"木曜"
    , 4:"金曜"
    , 5:"土曜"
    , 6:"日曜"
}

now = d.datetime.now()
friday = d.datetime(2020, 3, 13)
print(week_name[now.weekday()])
print(week_name[friday.weekday()])

[出力結果]

火曜
金曜

フォーマットを指定して表示する

日時のフォーマットを指定したい場合はformat()を使います。

import datetime as d
now = d.datetime.now()
print("{0:%Y/%m/%d}".format(now))
print("{0:%H:%M:%S}".format(now))
print("{0:%p %l:%M:%S}".format(now))
print("{0:%f}".format(now))

[出力結果]

2020/03/10
20:20:45
PM  8:20:45
771520

日時のフォーマットを指定するための書式コードは主に次のようなものがあります。

書式コード意味
%Y年を4桁で表示
%y年を2桁で表示
%m月を左側ゼロ埋めで2桁表示
%d日付
%j1月1日起点の日数
%H24時間表示の時間
%i12時間表示の時間
%pAMまたはPM
%M
%S
%fマイクロ秒

日時を比較する

日時の比較は数値と同じ比較演算子を使います。

import datetime as d
d_time1 = d.datetime(2020, 3, 10, 12, 34, 56)
d_time2 = d.datetime(2020, 3, 10, 12, 34, 57)

print(d_time1 == d_time2)
print(d_time1 < d_time2)
print(d_time1 > d_time2)
print(d_time1 <= d_time2)
print(d_time1 >= d_time2)

[出力結果]

False
True
False
True
False

日時⇔文字列の変換

datetimeで作成した日時は文字列ではなくdatetimeクラスなので、文字列として扱いたい場合は変換が必要です。

datetimeを文字列に変換するには先ほどのformat()を使う方法もありますが、そのほかにstrftime()を使う方法があります。strftime()の2つ目の引数に書式コードを指定することでフォーマットの指定が可能です。

import datetime as d
now = d.datetime.now()
now_str = d.datetime.strftime(now, "%Y/%m/%d %H:%M:%S")
print(now_str)
print(type(now_str))

[出力結果]

2020/03/10 11:30:19
<class 'str'>

また、文字列から日時に変換する場合はstrptime()を使います。

文字列の日時フォーマットと2つ目の引数に指定するフォーマットが一致している必要があります。

import datetime as d
str_datetime = "2020/03/10 11:30:19"
datetime = d.datetime.strptime(str_datetime, "%Y/%m/%d %H:%M:%S")
print(datetime)
print(type(datetime))

[出力結果]

2020-03-10 11:30:19
<class 'datetime.datetime'>

日時の足し算・引き算をする

日時の足し算・引き算はdatetime.timedelta()を使うことでできます。

しかし、timedelta()は週・日・時・分・秒の足し算・引き算はできますが、年・月を直接指定して計算できません。

年・月も含めた計算をしたい場合はdateutil.relativedelta()を使います。

import datetime as d
from dateutil.relativedelta import relativedelta

d_time = d.datetime(2019, 12, 30, 23, 58, 58)

print(d_time + relativedelta(years=3))
print(d_time + relativedelta(months=3))
print(d_time + relativedelta(weeks=3))
print(d_time + relativedelta(days=3))
print(d_time + relativedelta(hours=3))
print(d_time + relativedelta(minutes=3))
print(d_time + relativedelta(seconds=3))

print(d_time - relativedelta(years=3))
print(d_time - relativedelta(days=3))
print(d_time - relativedelta(hours=3))

[出力結果]

2022-12-30 23:58:58
2020-03-30 23:58:58
2020-01-20 23:58:58
2020-01-02 23:58:58
2019-12-31 02:58:58
2019-12-31 00:01:58
2019-12-30 23:59:01

2016-12-30 23:58:58
2019-12-27 23:58:58
2019-12-30 20:58:58

timeライブラリの使い方

次にtimeライブラリの使い方を見ていきましょう。

timeライブラリは時間を扱うライブラリで、主にプログラムの実行経過時間を取得する場合に使われます。

システム時刻を取得する

システム時刻とはエポックからの経過時間のことです。エポックとは時刻の起点のことで、これはプラットフォームによって変わってきます。例えばUNIXでは1970年1月1日0時0分0秒に設定されています。

システム時刻はtime()を使って取得します。

import time as t
print(t.time())

[出力結果]

1583841511.2078567

経過時間を取得する

プログラムの実行時間を取得には先ほどのtime()を使います。

下の例は、メイン処理前にtime()で1つ目のシステム時刻を取得し、メイン処理終了後にもう一度time()で2つ目のシステム時刻を取得し、2つのシステム時刻の差を計算して出力しています。

なおメイン処理では3つの1〜1000の整数が全て同じになるまで繰り返し処理をしています。

import time as t
import random as r

t1 = t.time()
while True:
    i1 = r.randint(1, 1000)
    i2 = r.randint(1, 1000)
    i3 = r.randint(1, 1000)
    if (i1 == i2 and i1 == i3):
        break;
t2 = t.time()

diff_t = t2 - t1

print(f"実行時間:{diff_t}")

[出力結果]

実行時間:0.48635005950927734
タイトルとURLをコピーしました