Python

PythonのTimeモジュールを使って時間を扱う方法について

By 2021年6月3日No Comments

この記事ではPythonのtimeモジュールを使ってUNIXエポックを基準とした

現在時刻の取得やエポック秒を日付時刻型に変換する方法に解説していきます。

UNIXエポックとはUNIX時間のコンピュータシステムであるUNIXで内部的に使用される時刻表現のことです。

まずは、timeモジュールをインポートします。

import time

PythonのTimeモジュールでエポックミリ秒で表示される現在時間を取得する方法

Pythonのtimeモジュールにあるtime( )関数を使ってエポックミリ秒で表示される現在時刻を取得することができます。

import time
print(time.time())

結果:

1622038053.408028

返り値はUNIXエポックからの経過秒数を示し浮動小数点数で表されています。浮動小数点数の小数点以下がミリ秒マイクロ秒の値になります。

秒以下を切り捨てたい場合はint( )関数を使います。

print(int(time.time()))

結果:

1622038053

float型である小数表現ははなく視覚的に分かりやすい時刻を表示するにはctime( )関数を使うと取得する事ができます。

print(time.ctime())

結果:

Wed May 26 23:07:33 2021

ctime( )関数で取得した曜日、月、日、時間、年をsplit( )関数と組み合わせて分割することもできます。

get_time = time.ctime()
print(get_time.split())

結果:

['Wed', 'May', '26', '23:07:33', '2021']

localtime( )関数を使うとタイムゾーンで現在の時間を取得することができます。

print(time.localtime())

結果:

time.struct_time(tm_year=2021, tm_mon=5, tm_mday=26, tm_hour=23, tm_min=7, tm_sec=33, tm_wday=2, tm_yday=146, tm_isdst=0)

それぞれタイムゾーンで取得した経過時刻を個別に表示することもできます。

get_time = time.localtime()
print('日:',get_time.tm_mday)
print('月:',get_time.tm_mon)
print('通算日数:',get_time.tm_yday)

結果:

日: 26
月: 5
通算日数: 146

struct_time( )の引数の値の意味は下記になります。

   値意味範囲
tm_sec0~60
tm_min0~59
tm_hour0~23
tm_mday1~31
tm_mon0~11
tm_year1900年を起点とした経過年 
tm_wday曜日0~6(日曜日を 0 とする)
tm_yday1月1日を基準とした通算日0~365
tm_isdst季節時間のフラグ0 のときは、季節時間の処理を行わない。0 より大きいときは、季節時間の処理を行う。0 より小さいときは、不明である(その情報が得られないことを示す)

mktime( )関数も一緒に使うことでlocaltime( )で返したstruct_time( )を受け取り、それを小数表現に変換することができます。

print(time.mktime(time.localtime()))

結果

1622038053.0

gmtime( )関数を使ってもUTCで現在時刻を取得することができます。

print(time.gmtime())

結果:

time.struct_time(tm_year=2021, tm_mon=5, tm_mday=26, tm_hour=14, tm_min=7, tm_sec=33, tm_wday=2, tm_yday=146, tm_isdst=0)

現在、使っている環境のエポックが何かを知るには,time.gmtime( )の引数に0の値をいれると確認することができます。

print(time.gmtime(0))

結果:

time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

このように現在の環境のエポックを取得する事ができました。協定世界時 (UTC)は1970年1月1日午前0時0分0秒を0としています。

PythonのTimeモジュールでフォーマット文字列を指定してエポックを現在時刻に変換する方法

timeモジュールのstrftime( )関数を使ってフォーマット文字列を指定するとエポックを日付時刻に変換することができます。

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

結果:

2021-05-26 23:07:33

このようにフォーマット文字列を指定すると柔軟に時刻を取得することができます。

フォーマット文字列のディレクティブのスニペットは下記になります。

出力内容ディレクティブ
年(下2桁)%y
年(4桁)%Y
月(短縮英語)%b
月(英語)%B
月(01-12)%m
日(01-31)%d
時(00-23)%H
時(01-12)%I
分(00-59)%M
秒(00-61)%S
曜日(短縮英語)%a
曜日(英語)%A
曜日(数字0-6、日曜日が0)%w
1月1日からの経過日数(001-366)%j
第何週目か(日曜始まり)%U
第何週目か(月曜始まり)%W
年月日(月/日/年の順で各2桁)%x
時分秒(hh:mm:ss)%X
時差%z
AMかPMか%p
タイムゾーン%Z
time.ctime()のような表現%c

Datetimeモジュールを使ってエポック秒を日付時刻型に変換する方法

エポック秒を日付時刻型に変換するにはPythonで日付時刻型で時刻を取得する事ができるdatetimeモジュールを使う必要があるのでdatetimeモジュールをインポートします。

import datetime

time( )関数で取得したエポックを日付時刻型に変換します。

import datetime
import time

epoch = time.time()
time_change = datetime.datetime.fromtimestamp(epoch)
print(time_change)

結果:

2021-05-26 23:07:33.408568

このようにエポック秒を日付時刻型に変換することができました。

さらにstrftime( )関数の引数にフォーマット文字列を指定することもできます。

epoch = time.time()
time_change = datetime.datetime.fromtimestamp(epoch).strftime('%A, %B %-d, %Y %H:%M:%S')
print(time_change)

結果:

Wednesday, May 26, 2021 23:07:33

このようにPythonのdatetimeモジュールを使うとエポック秒を日付時刻型に変換することができます。

Pythonのdatetimeモジュールの記事についてはこちらになります。

まとめ

今回はPythonのtimeモジュールを使ってUNIXエポックを基準点とした経過秒数で現在時刻の取得やエポックで表示される時間を時刻形式に変換しました。以上、Pythonのtimeモジュールでの時刻の扱う方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL