Pythonではtimeとdatetimeライブラリを使うと、時間関連の操作は難なくできます。
とりあえず意識したいのはunixtime(秒数)とYmdHisのフォーマット変換ですが、PHPのように癖のあるdate値変換ではなさそうなので、やはり扱いやすい言語といえるようです。
要件
- 1900年からの秒数
- sleep処理
- 1番からYmdHisの取得(曜日含む)
- YmdHisから1番の取得
- ミリ秒の取得
- 本プログラムの経過秒数
ソース
#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
実行
$ 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を取得する時に
y = int(time.strftime("%Y" , time.time()))
という風にしているのですが、ライブラリで取得できる値は数値なんですが、strftime関数では見た目の通り文字列になります。それをさらに整数値に直しているんですが、このやり方以外にストレートに数値で取得できる方法がわかりませんでした。
もう少しPythonを使いこなす必要がありそうだ。
0 件のコメント:
コメントを投稿