Pythonのdatetime.today()で現在時刻を取得: 年、月、日、時、分、秒の取得

264, 2021-06-07

目次

Pythonで現在時刻を取得する

Pythonではライブラリを使うと現在時刻を取得することができます。
ライブラリは標準ライブラリのdatetimeを使います。
結論から言うとdatetimeを使って現在時刻を取得するには↓のようにします。

from datetime import datetime


today = datetime.today()
print(today)
# 2021-04-21 21:07:22.417046

この記事ではdatetimeを使って現在時刻を取得する方法、取得した現在時刻を利用する方法をわかりやすく解説します。
具体的には↓を見ていきます。

  • datetimeとは?

  • datetime.datetimeオブジェクトとは?

  • 現在時刻の取得方法

  • 現在時刻の属性値

  • 現在時刻からn時間前の時刻

  • 現在時刻からn時間後の時刻

関連記事
Pythonのdatetimeの使い方: 現在時刻を得る、文字列を時刻に変換する

datetimeとは?

PythonのdatetimeとはPythonの標準ライブラリの1つです。

このライブラリ、モジュールには時刻に関するツールが格納されています。
datetimeの関数を使うと現在時刻を取得出来たり、時間同士の差分を計算したり、文字列を時刻にしたり、時刻を文字列にすることが可能です。

【絵】時計くん

類似のモジュールにはcalendartimeがあります。
calendarは汎用のカレンダーを扱えるモジュールです。
timeは時刻に特化したモジュールです。

datetimeを使いたい場合は↓のようにdatetimeをインポートすることで使うことができます。

import datetime

datetime.datetimeオブジェクトとは?

datetimeモジュールには複数のオブジェクトが保存されています。
datetime, datetimeオブジェクト等々。

datetimeオブジェクトはdatetimeモジュールと名前がかぶっていてわかりづらいですが、階層的には

+ datetime
`----------- datetime

です。
そのため、

import datetime


print(datetime.datetime)
# <class 'datetime.datetime'>

のようにアクセスすることができます。
datetimeオブジェクトは日付と時刻をまとめて管理するオブジェクトです。
このオブジェクトを使うと日付と時刻にまつわる処理を書くことができます。

datetimeはグレゴリオ暦が両方向に延長されているものと仮定されています。
また、datetimeは1日1日が厳密に60 * 60 * 24秒であると仮定しています。
60秒は1分でそれが60個で1時間、さらにそれが24個なのできっちり24時間と言うことですね。

現在時刻の取得方法

現在時刻を取得するにはdatetime.datetimeオブジェクトのtoday()関数を使います。
today()は↓のような構造になっています。

classmethod datetime.today()

today()はタイムゾーンを指定できません。
タイムゾーンを指定したい場合はnow()を使います。

today()は時刻の取得に成功すると現在時刻を格納したdatetime.datetimeオブジェクトを返します。

from datetime import datetime


today = datetime.today()

print(type(today))
# <class 'datetime.datetime'>

print(today)
# 2021-04-21 21:58:17.969627

現在時刻の属性値

today()が返すdatetime.datetimeオブジェクトには属性があります。
この属性にアクセスすることで具体的な現在時刻の情報に触れることができます。

時刻に関する属性は↓の通りです。

属性 表現する時間 値の範囲
year 年数 MINYEAR <= year <= MAXYEAR
month 月数 1 <= month <= 12
day 日数 1 <= day <= 指定された月と年における日数
hour 時数 0 <= hour < 24
minute 分数 0 <= minute < 60
second 秒数 0 <= second < 60
microsecond マイクロ秒数 0 <= microsecond < 1000000

属性の参照は↓のようにします。

from datetime import datetime


today = datetime.today()

print(today.year)  # 2021
print(today.month)  # 4
print(today.day)  # 21
print(today.hour)  # 21
print(today.minute)  # 15
print(today.second)  # 26
print(today.microsecond)  # 950872

*↑の出力は実行環境によって変わります。

現在時刻からn時間前の時刻

現在時刻からn時間前の時刻を取得したい場合があります。
そういう場合はdatetime.timedelta()を使います。
timedelta()は経過時間を表現するオブジェクトです。
現在時刻から1時間前の時刻を取得したい場合は↓のようにします。

from datetime import datetime, timedelta


today = datetime.today()
dt = today - timedelta(hours=1)

print(dt)
# 2021-04-21 21:22:14.545597

最初にdatetime.today()で現在時刻を取得します。
そしてtimedelta(hours=1)でオブジェクトを作成し、それをtodayから引きます。
その結果であるdtには演算された時刻が保存されています。

timedelta()に指定できる引数は↓の通りです。

  • days

  • seconds

  • microseconds

  • milliseconds

  • minutes

  • hours

  • weeks

↑の引数を見ると時間の他にも分数や秒数、日数なども指定できることがわかります。

現在時刻からn時間後の時刻

現在時刻からn時間後の時刻を取得したい場合は↓のようにします。

from datetime import datetime, timedelta


today = datetime.today()
dt = today + timedelta(hours=1)

print(dt)
# 2021-04-21 22:22:14.545597

timedeltaの引数などの詳細については前述の項を参照してください。
n時間前の演算と比べると演算が足し算になっているのがわかります。
このようにtimedeltaオブジェクトはdatetime.datetimeオブジェクトと演算させることができます。

おわりに

今回はPythonで現在時刻を取得する方法を見てみました。
現在時刻を取得したいケースはけっこうありますが、Pythonでは簡単に取得できますね。

今何時ですか?

右側です

日時計かよ