[言語別TIME処理] Pythonで時間処理

Pythonではtimeとdatetimeライブラリを使うと、時間関連の操作は難なくできます。
とりあえず意識したいのはunixtime(秒数)とYmdHisのフォーマット変換ですが、
PHPのように癖のあるdate値変換ではなさそうなので、やはり扱いやすい言語といえるようです。
要件
- 1900年からの秒数
- sleep処理
- 1番からYmdHisの取得(曜日含む)
- YmdHisから1番の取得
- ミリ秒の取得
- 本プログラムの経過秒数
ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#coding: utf-8 import time , datetime def timeFunc_getTime(): return time.time() def timeFunc_sleep(sec): time.sleep(sec) def timeFunc_format(tm): weekArr = ["日" , "月" , "火" , "水" , "木" , "金" , "土"] ymd = time.strftime("%Y/%m/%d" , time.gmtime(tm)) his = time.strftime("%H:%M:%S " , time.gmtime(tm)) wknum = time.strftime("%w" , time.gmtime(tm)) wk = weekArr[int(wknum)] gmt = time.strftime("%z" , time.gmtime(tm)) return ymd +" "+ his +" ("+ wk +") "+ his +" "+gmt def timeFunc_microtime(tm): if tm is None : tm = time.time() return '%03d' % int(str(tm).split(".")[1]) def timeFunc_ymd2sec(y,m,d,h,i,s): return datetime.datetime(y,m,d,h,i,s).strftime("%s") #1 start start = timeFunc_getTime() print "1. start : ",start #2 sleep print "2. sleep-start..." timeFunc_sleep(2) print " ...sleep-finish" #3 format print "3. Format : ", timeFunc_format(start) #4 ymd->sec y = int(time.strftime("%Y" , time.gmtime(start))) m = int(time.strftime("%m" , time.gmtime(start))) d = int(time.strftime("%d" , time.gmtime(start))) h = int(time.strftime("%H" , time.gmtime(start))) i = int(time.strftime("%M" , time.gmtime(start))) s = int(time.strftime("%S" , time.gmtime(start))) print "4. ymd2sec : ", timeFunc_ymd2sec(y,m,d,h,i,s) #5 micro-time print "5. micro-time : ",timeFunc_microtime(start) #6 finish end = timeFunc_getTime() print "6. end : ", end print " passage (end - start) : ", end - start |
実行
1 2 3 4 5 6 7 8 9 |
$ python timeFunction.py 1. start : 1492909824.99 2. sleep-start... ...sleep-finish 3. Format : 2017/04/23 01:10:24 (日) 01:10:24 +0900 4. ymd2sec : 1492877424 5. micro-time : 099 6. end : 1492909826.99 passage (end - start) : 2.00187492371 |
解説
timeライブラリとdatetimeライブラリ
今回やりたかった処理はdatetimeライブラリでほぼ出来てしまうことを後から知ったのですが、timeライブラリも触っておいて損はないでしょう。
ちなみに、以下がリファレンスページです。
マイクロ秒の扱い
Pythonでは基本的にtimeコマンドで小数秒も取得できるので、文字列に変換して、小数点のみを抜き出しています。
この時に3桁にしていますが、数値型で扱っても問題ありません。
Ymd形式
少し手こずった点として、年月日、時分秒のフォーマット変換において、変数型をいちいち変換してやらないとエラーが出るという点です。
具体的には、Yearを取得する時に
1 |
y = int(time.strftime("%Y" , time.time())) |
という風にしているのですが、ライブラリで取得できる値は数値なんですが、strftime関数では見た目の通り文字列になります。それをさらに整数値に直しているんですが、このやり方以外にストレートに数値で取得できる方法がわかりませんでした。
もう少しPythonを使いこなす必要がありそうだ。