Pythonクックブック(3章)
昨日のめざせ会社の星を観てたら、「25分作業して5分休憩する」ってことをやってる人が出てた。
調べてみると、この方法「ポモドーロ・テクニック」って呼ばれてる時間管理術。
「○ポモドーロ」って見かけたり、翻訳本「アジャイルな時間管理術 ポモドーロテクニック入門」が出たりしてた。
「ポモドーロって何?」って気になったけど、その時は調べてなかったなぁ。
興味をもったらその時に調べる癖をつけんと、数日も経つと忘れてしまって、いつまで経っても解らんままだ。
timeモジュール
時刻データにアクセスするためのモジュール。
時刻の考え方は、UTCという世界標準時があり、そこからの時差を加味したローカル時間(日本ならJST)で表現される。
コンピュータでの時刻の管理方法は、時刻データをエポックと呼ばれる任意の時刻からの経過秒数で行っている。
エポックの値はプラットフォームに依存するが、通常1970年1月1日午前0時となっている
Pythonプログラムからは、time.gmtime(0)の値を見ればエポックがいつなのかがわかる。
>>> import time >>> 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) >>> time.gmtime(0).tm_year 1970
time.gmtime()は以下の整数値からなるstruct_time(シーケンス)を返してくれる。
Index | Attribute | Value |
---|---|---|
0 | tm_year | 年[4桁] |
1 | tm_mon | 月[1〜12] |
2 | tm_mday | 日[1〜31] |
3 | tm_hour | 時[0〜23] |
4 | tm_min | 分[0〜59] |
5 | tm_sec | 秒[0〜61]*1 |
6 | tm_wday | 曜日[0〜6]*2 |
7 | tm_yday | 1年の何日目か[0〜366] |
8 | tm_isdst | サマータイムが有効(1)か否(0)か*3 |
コンピュータはepochからの経過秒数で時刻データを扱うが、
Pythonプログラムでの時刻データの扱い方は2種類ある。
- epochからの経過秒数として扱う
- struct_timeシーケンスとして扱う
Pythonプログラムで時刻を表示方法は以下の2種類ある。
- プログラムの内部データをそのまま表示する
- 人間に解りやすく加工して表示する
内部データをそのまま表示する。
出力をUTC/ローカル時間どちらで表示するのか、入出力の扱いをどうするのかで使う関数が異なる。
method | 表示時刻 | input | output | in/out反転 |
---|---|---|---|---|
time.gmtime | UTC | epochからの秒数 | struct_timeシーケンス | calendar.timegm |
time.localtime | ローカル時間 | epochからの秒数 | struct_timeシーケンス | time.mktime |
time.strptime | − | 文字列(,文字列形式) | struct_timeシーケンス | ??? |
人間に解りやすくして表示する。
出力の形式が固定*4/自由どちらで表示するのか、入力をどうするのかで使う関数が異なる。
method | input | 出力形式 | 表示時刻 |
---|---|---|---|
time.asctime | struct_timeシーケンス | 固定 | 入力と同じ |
time.ctime | epochからの秒数 | 固定 | ローカル時間 |
time.strftime | struct_timeシーケンス | 自由 | 入力と同じ |
エポック以前は扱えないって書いてあるけど、2000年問題の所に1969とか書いてあるし、
実はエポック以前もいけるんじゃないかと思って試してみたけど、
epochからstruct_timeへの変換は"○"、struct_timeからepochへの変換は"×"って結果になった。
>>> time.localtime(-10**10) time.struct_time(tm_year=1653, tm_mon=2, tm_mday=10, tm_hour=15, tm_min=32, tm_sec=19, tm_wday=0, tm_yday=41, tm_isdst=0) >>> time.mktime(time.localtime(-10**10)) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year out of range >>>
色々試してみたら、tm_year=1900以降ならば動きはするらしい。まぁ、正しく動く保証は当然ないんだろうけど。
>>> time.mktime((1899,0,0,0,0,0,0,0,0)) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: year out of range >>> time.mktime((1900,0,0,0,0,0,0,0,0)) -2211786000.0 >>>
参考サイト
モジュールインデックス@Python 2.6.2 document
- 作者: Alex Martelli,Anna Martelli Ravenscroft,David Ascher,鴨澤眞夫,當山仁健,吉田聡,吉宗貞紀
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/06/26
- メディア: 大型本
- 購入: 11人 クリック: 423回
- この商品を含むブログ (85件) を見る