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

2017年4月26日

Python テクノロジー プログラミング 特集

Pythonではtimeとdatetimeライブラリを使うと、時間関連の操作は難なくできます。 とりあえず意識したいのはunixtime(秒数)とYmdHisのフォーマット変換ですが、PHPのように癖のあるdate値変換ではなさそうなので、やはり扱いやすい言語といえるようです。

要件

  1. 1900年からの秒数
  2. sleep処理
  3. 1番からYmdHisの取得(曜日含む)
  4. YmdHisから1番の取得
  5. ミリ秒の取得
  6. 本プログラムの経過秒数

ソース

#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を使いこなす必要がありそうだ。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ