Pythonで現在時刻・日付・日時を取得

Pythonで現在時刻を取得するには標準ライブラリのtimeモジュールかdatetimeモジュールを使います。UNIX時間(エポック秒)で取得したい場合はtimeモジュール、日時(日付と時刻)を表すdatetimeオブジェクトなどで取得したい場合はdatetimeモジュール。 ここでは以下の内容について説明します。

現在時刻のUNIX時間(エポック秒)を取得: time.time() 現在日時のdatetimeオブジェクトを取得: datetime.now() タイムゾーンの設定 今日の日付のdateオブジェクトを取得: date.today() 現在時刻のtimeオブジェクトを取得

datetimeモジュールについての基本的な内容は

現在時刻のUNIX時間(エポック秒)を取得: time.time()

UNIX時間(エポック秒)はUTC(協定世界時)の1970年1月1日0時0分0秒からの経過秒数。 timeモジュールのtime()関数を使うと現在のUNIX時間(エポック秒)を浮動小数点数float型で取得できます。

time.time() --- 時刻データへのアクセスと変換 — Python 3.7.2 ドキュメント

import time

ut = time.time()

print(ut)
# 1549281692.9876952

print(type(ut))
# <class 'float'>

これを利用すると処理の経過時間を測定することもできます。

UNIX時間(エポック秒)とdatetimeモジュールのdatetimeオブジェクトなどとの相互変換については

以降で説明するように、現在時刻のdatetimeオブジェクトを取得するには専用の関数が用意されています。

現在日時のdatetimeオブジェクトを取得: datetime.now()

現在日時(日付と時刻)のdatetimeオブジェクトを取得するにはdatetime.now()を使います。

datetime.now() --- 基本的な日付型および時間型 — Python 3.7.2 ドキュメント

import datetime

dt_now = datetime.datetime.now()

print(dt_now)
# 2019-02-04 21:04:15.412854

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

datetimeオブジェクトは任意の書式の文字列に変換できます。

print(dt_now.strftime('%Y年%m月%d日 %H:%M:%S'))
# 2019年02月04日 21:04:15

print(type(dt_now.strftime('%Y年%m月%d日 %H:%M:%S')))
# <class 'str'>

print(dt_now.isoformat())
# 2019-02-04T21:04:15.412854

print(type(dt_now.isoformat()))
# <class 'str'>

また、属性で年year、月month、日day、時間hour、分minute、秒second、マイクロ秒microsecondを整数intで取得できます。

print(dt_now.year)
# 2019

print(dt_now.month)
# 2

print(dt_now.day)
# 4

print(dt_now.hour)
# 21

print(dt_now.minute)
# 4

print(dt_now.second)
# 15

print(dt_now.microsecond)
# 412854

print(type(dt_now.year))
# <class 'int'>

タイムゾーンの設定

タイムゾーンを考慮する場合は注意が必要。datetimeオブジェクトのタイムゾーンについての詳細は

デフォルトではtzinfo属性がNoneのnaiveなオブジェクトでローカルな日時が返されます。例は日本標準時(JST)の環境で実行しているので日本標準時における現在日時の値となります。

dt_now = datetime.datetime.now()

print(dt_now)
# 2019-02-04 21:04:15.412854

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

print(dt_now.tzinfo)
# None

datetime.now()の引数にtimezoneオブジェクトを指定すると、それをもとにタイムゾーンが考慮されたawareなオブジェクトが返されます。

dt_now_utc_aware = datetime.datetime.now(datetime.timezone.utc)

print(dt_now_utc_aware)
# 2019-02-04 12:04:15.561748+00:00

print(dt_now_utc_aware.tzinfo)
# UTC


dt_now_jst_aware = datetime.datetime.now(
    datetime.timezone(datetime.timedelta(hours=9))
)

print(dt_now_jst_aware)
# 2019-02-04 21:04:15.591827+09:00

print(dt_now_jst_aware.tzinfo)
# UTC+09:00

tzinfo属性がNoneのnaiveなオブジェクトでUTCの日時を返すdatetime.utcnow()もあります。

dt_now_utc_naive = datetime.datetime.utcnow()

print(dt_now_utc_naive)
# 2019-02-04 12:04:15.621472

print(dt_now_utc_naive.tzinfo)
# None

今日の日付のdateオブジェクトを取得: date.today()

今日の日付のdateオブジェクトを取得するにはdate.today()を使います。

date.today() --- 基本的な日付型および時間型 — Python 3.7.2 ドキュメント

d_today = datetime.date.today()

print(d_today)
# 2019-02-04

print(type(d_today))
# <class 'datetime.date'>

date.today()はローカルな日付が返されます。 dateオブジェクトはtzinfo属性を持たないが、タイムゾーンを考慮した日付を取得したい場合は、上述のdatetime.now()の引数を指定したりdatetime.utcnow()(UTCの場合)を使ったりして所望のタイムゾーンにおける日時の値をもつdatetimeオブジェクトを生成してからdate()メソッドでdateオブジェクトに変換します。

d_today_utc = datetime.datetime.utcnow().date()

print(d_today_utc)
# 2019-02-04

print(type(d_today_utc))
# <class 'datetime.date'>

例ではどちらも変わらないが、時差によって日付をまたぐようなタイミングだと異なる結果となります。

現在時刻のtimeオブジェクトを取得

datetimeモジュールには時刻を表すtime型もあるが、現在時刻をtimeオブジェクトとして取得する関数は用意されていない(Python3.7時点)。 datetimeオブジェクトを生成してからtime()メソッドでtimeオブジェクトに変換できます。

t_now = datetime.datetime.now().time()

print(t_now)
# 21:04:15.782546

print(type(t_now))
# <class 'datetime.time'>

print(t_now.tzinfo)
# None

time()メソッドだと元のdatetimeオブジェクトにtzinfo属性が設定されていても無視されます。

dt_now_utc_aware = datetime.datetime.now(datetime.timezone.utc)

print(dt_now_utc_aware)
# 2019-02-04 12:04:15.838464+00:00

print(dt_now_utc_aware.tzinfo)
# UTC

print(dt_now_utc_aware.time())
# 12:04:15.838464

print(dt_now_utc_aware.time().tzinfo)
# None

tzinfo属性を保持したい場合はtimetz()メソッドを使います。

print(dt_now_utc_aware.timetz())
# 12:04:15.838464+00:00

print(dt_now_utc_aware.timetz().tzinfo)
# UTC
Last Updated: 6/26/2019, 10:34:03 PM