[解決!Python]今日の日付や時刻を取得するには解決!Python

Pythonに標準で付属するdatetimeモジュールとtimeモジュールを使って、現在の日付と時刻を取得する方法を紹介する。

» 2024年01月08日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

* 本稿は2021年11月2日に公開された記事をPython 3.12.1で動作確認し、Python 3.12においてdatetime.datetime.utcnowクラスメソッドが非推奨になったことを追記したものです(確認日:2024年1月8日)。


# datetimeモジュールを使った現在の日付と時刻の取得
import datetime

dt = datetime.datetime.today()  # ローカルな現在の日付と時刻を取得
print(dt)  # 2021-10-29 15:58:08.356501

# 日付と時刻を構成する要素の取り出し
print(f'year: {dt.year}, month: {dt.month}, day: {dt.day}')
print(f'hour: {dt.hour}, minute: {dt.minute}, second: {dt.second}')
print(f'micro second: {dt.microsecond}')
# 出力例
#year: 2021, month: 10, day: 29
#hour: 15, minute: 58, second: 8
#micro second: 356501

# datetimeオブジェクトから日付または時刻を取り出す
d = dt.date()
print(d)  # 2021-10-29

t = dt.time()
print(t)  # 15:58:08.356501

tdy = datetime.date.today()  # 今日の日付の取得
print(tdy)  # 2021-10-29

# タイムゾーンを考慮する
dt = datetime.datetime.now()  # タイムゾーンなしで現在の日付と時刻を取得
print(dt)  # 2021-10-29 16:16:23.202059

dt = datetime.datetime.now(datetime.timezone.utc)  # タイムゾーン付きでUTCを取得
print(dt)  # 2021-10-29 07:23:14.464801+00:00
print(dt.tzinfo)  # UTC

dt = datetime.datetime.utcnow()  # タイムゾーンなしでUTCを取得
print(dt)  # 2021-10-29 07:31:41.503042

t_delta = datetime.timedelta(hours=9# 9時間
JST = datetime.timezone(t_delta, 'JST'# UTCから9時間差の「JST」タイムゾーン
dt = datetime.datetime.now(JST)  # タイムゾーン付きでローカルな日付と時刻を取得
print(dt)

# timeモジュールを使った現在の日付と時刻の取得
import time

t = time.time()  # UNIX時間(1970/01/01 00:00:00からの経過時刻)を取得
dt_from_timestamp = datetime.datetime.fromtimestamp(t)
print(dt_from_timestamp)  # 2021-10-29 16:59:04.741680

c_time = time.ctime(t)  # UNIX時刻を文字列表現に変換
print(c_time)  # Fri Oct 29 16:59:04 2021

local_time = time.localtime(t)  # ローカル時刻をtime.struct_time型として取得
print(local_time)
gm_time = time.gmtime(t)  # UTC時刻をtime.struct_time型として取得
print(gm_time)
# 出力例
#time.struct_time(tm_year=2021, tm_mon=10, tm_mday=29, tm_hour=16, tm_min=59,
# tm_sec=4, tm_wday=4, tm_yday=302, tm_isdst=0)
#time.struct_time(tm_year=2021, tm_mon=10, tm_mday=29, tm_hour=7, tm_min=59,
#tm_sec=4, tm_wday=4, tm_yday=302, tm_isdst=0)

asc_time = time.asctime(local_time)  # 上のlocal_timeを文字列表現に変換
print(asc_time)  # Fri Oct 29 16:59:04 2021

dt = datetime.datetime.strptime(asc_time, '%a %b %d %H:%M:%S %Y')
print(dt)  # 2021-10-29 16:59:04


datetimeモジュールを使った現在の日付と時刻の取得

 Pythonで現在の日付と時刻を取得するには幾つかの方法がある。代表的なものとしてはPythonに標準で付属するdatetimeモジュールまたはtimeモジュールを使う方法が挙げられる。まずはdatetimeモジュールを使う方法を見てみよう。

import datetime

dt = datetime.datetime.today()  # ローカルな現在の日付と時刻を取得
print(dt)  # 2021-10-29 15:58:08.356501


 一番簡単な方法は上に示した、datetimeモジュールに含まれるdatetimeクラスのtodayクラスメソッドを呼び出すことだ。todayクラスメソッドが返送するのは、datetime.datetime型のオブジェクトであり、以下のようにyear/month/day/hour/minute/second/microsecond属性によって日付や時刻を構成する各要素にアクセスできる。

print(f'year: {dt.year}, month: {dt.month}, day: {dt.day}')
print(f'hour: {dt.hour}, minute: {dt.minute}, second: {dt.second}')
print(f'micro second: {dt.microsecond}')
# 出力例
#year: 2021, month: 10, day: 29
#hour: 15, minute: 58, second: 8
#micro second: 356501


 あるいはstrftimeメソッドを呼び出して、日付と時刻を独自の書式でフォーマットすることも可能だが、これについては別稿で紹介する。

 取得したdatetimeクラスのオブジェクトには、その日付を取り出すdateメソッドと時刻を取り出すtimeメソッドもある。使用例を以下に示す。

d = dt.date()
print(d)  # 2021-10-29

t = dt.time()
print(t)  # 15:58:08.356501


 なお、今日の日付を取得するだけなら、以下のようにdatetimeモジュールに含まれるdateクラスのtodayクラスメソッドを呼び出してもよい。

tdy = datetime.date.today()
print(tdy)  # 2021-10-29


 dateメソッドの戻り値はdatetime.dateクラスのオブジェクトであり、timeメソッドの戻り値はdatetime.timeクラスのオブジェクトだ。これらにはdatetimeクラスのオブジェクトと同様、日付を構成する要素を表す属性と時刻を構成する要素を表す属性がある(例は省略)。

 todayメソッドと同様に、datetimeクラスのnowクラスメソッドを呼び出しても現在の日付と時刻を取得できる。

dt = datetime.datetime.now()  # タイムゾーンなしで現在の日付と時刻を取得
print(dt)  # 2021-10-29 16:16:23.202059


 todayメソッドを呼び出したり、nowメソッドを引数なしで呼び出したりした場合、得られる値はローカルな日付と時刻となる。この場合、datetimeオブジェクトにはタイムゾーン情報が含まれない(こうしたオブジェクトのことを「naive」と呼ぶ。逆にタイムゾーンなどの情報を含むオブジェクトのことを「aware」と呼ぶ)。

 nowメソッドはタイムゾーンを指定して呼び出せる。その場合は、取得する日付と時刻は指定したタイムゾーンのものに変換される。以下はUTC(協定世界時)をタイムゾーンに指定してnowメソッドを呼び出す例だ。

dt = datetime.datetime.now(datetime.timezone.utc)  # タイムゾーン付きでUTCを取得
print(dt)  # 2021-10-29 07:23:14.464801+00:00
print(dt.tzinfo)  # UTC


 2つ目の出力ではタイムゾーンが「UTC」となっていること、その上の出力の最後にはそのことを裏付ける「+00:00」があることに注目してほしい。

 なお、タイムゾーン情報なしでUTCを取得するutcnowメソッドもある(このメソッドはPython 3.12で非推奨となり、「datetime.datetime.now(datetime.UTC)」のようにしてUTCを取得することが推奨されている)。

dt = datetime.datetime.utcnow()  # タイムゾーンなしでUTCを取得
print(dt)  # 2021-10-29 07:31:41.503042


 タイムゾーンを指定してnowメソッドを呼び出すには、datetime.timezoneクラスまたはdatetime.tzinfoクラスの派生クラスのインスタンスをnowメソッドに渡す。以下は、JST(日本標準時。UTC+9)を表すtimezoneクラスのインスタンスを作成して、それをnowメソッドに渡すことでJSTをタイムゾーンとするローカルな時刻を取得する例だ。

t_delta = datetime.timedelta(hours=9# 9時間
JST = datetime.timezone(t_delta, 'JST'# UTCから9時間差の「JST」タイムゾーン
dt = datetime.datetime.now(JST)  # タイムゾーン付きでローカルな日付と時刻を取得
print(dt)  # 2021-10-29 16:44:02.888144+09:00


 datetimeクラスのオブジェクトにタイムゾーンを設定するには、astimezoneメソッドを使えるが、これについてはPythonのドキュメントを参照されたい。

timeモジュールを使った現在の日付と時刻の取得

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。