2015年12月11日

calendar.timegm()

timeモジュールには時間に関する様々な関数・型が定義されています。

最も基本的な現在時刻を取得する関数の使用例を示します。

>>> import time

# エポックタイムを取得
>>> time.time()
1449268841.95064

# struct_time(UTC)を取得
>>> time.gmtime()
time.struct_time(tm_year=2015, tm_mon=12, tm_mday=4, tm_hour=22, 
tm_min=40, tm_sec=48, tm_wday=4, tm_yday=338, tm_isdst=0)

time.gmtime() は、エボックタイムを引数として受けることも出来ます。この場合、現在時刻ではなく引数のエポックタイムを struct_time(UTC) に変換します。
# エポックタイム → struct_time(UTC)
>>> time.gmtime(1449200000)
time.struct_time(tm_year=2015, tm_mon=12, tm_mday=4, tm_hour=3, 
tm_min=33, tm_sec=20, tm_wday=4, tm_yday=338, tm_isdst=0)

それではこの逆、即ち struct_time(UTC) をエポックタイムに変換する関数はあるのでしょうか?
あるにはあるのですが、何故か timeモジュールではなく calendarモジュールに含まれています。calendar.timegm() がその関数です。
>>> given_utc = time.gmtime(1449200000)

# struct_time(UTC) → エポックタイム
>>> import calendar
>>> epoch = calendar.timegm(given_utc)

>>> time.gmtime(epoch + 24 * 60 * 60)
time.struct_time(tm_year=2015, tm_mon=12, tm_mday=5, tm_hour=3, 
tm_min=33, tm_sec=20, tm_wday=5, tm_yday=339, tm_isdst=0)

「struct_time(local time) → エポックタイム」の変換は timeモジュールの time.mktime() でできるというのに、何だかアンバランスですね。

0 件のコメント:

コメントを投稿