Pythonで現在時刻・日付・日時を取得
Pythonで現在時刻を取得するには標準ライブラリのtimeモジュールかdatetimeモジュールを使う。
UNIX時間(エポック秒)で取得したい場合はtimeモジュール、日時(日付と時刻)を表すdatetime
オブジェクトなどで取得したい場合はdatetimeモジュール。
ここでは以下の内容について説明する。
- 現在時刻のUNIX時間(エポック秒)を取得:
time.time()
- 現在日時の
datetime
オブジェクトを取得:datetime.datetime.now()
- タイムゾーンの設定
- 今日の日付の
date
オブジェクトを取得:datetime.date.today()
- 現在時刻の
time
オブジェクトを取得
datetimeモジュールについての基本的な内容は以下の記事を参照。
現在時刻のUNIX時間(エポック秒)を取得: time.time()
UNIX時間(エポック秒)はUTC(協定世界時)の1970年1月1日0時0分0秒からの経過秒数。
timeモジュールのtime()
を使うと現在のUNIX時間(エポック秒)を浮動小数点数float
型で取得できる。
import time
ut = time.time()
print(ut)
# 1549281692.9876952
print(type(ut))
# <class 'float'>
これを利用すると処理の経過時間を測定することもできる。
UNIX時間(エポック秒)とdatetimeモジュールのdatetime
オブジェクトなどとの相互変換については以下の記事を参照。
以降で説明するように、現在時刻のdatetime
オブジェクトを取得するには専用の関数が用意されている。
現在日時のdatetimeオブジェクトを取得: datetime.datetime.now()
現在日時(日付と時刻)のdatetime
オブジェクトを取得するにはdatetimeモジュールのdatetime.now()
を使う。
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オブジェクトを取得: datetime.date.today()
今日の日付のdate
オブジェクトを取得するにはdatetimeモジュールのdate.today()
を使う。
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