ログから処理時間が欲しいときに小数点以下で欲しいな、とか思ったときにやる方法メモ
環境
やり方
一番簡単なのは Time
の型同士で引くこと。
t0 = "2018-10-10 10:00:51.14".in_time_zone # => Wed, 10 Oct 2018 10:00:51 JST +09:00 t1 = "2018-10-10 10:00:51.25".in_time_zone # => Wed, 10 Oct 2018 10:00:51 JST +09:00 # わかりやすくTime型へ変換をかける t1.to_time - t0.to_time # => 0.11
※ in_time_zone
に関してはこちらを参照のこと
文字列で保存する場合はiso8601メソッドがおすすめ
『開始時間と終了時間をRailsログに残して、必要なときにその始まりと終わりの差分を取ろう』とかやるときはあると思います。
ただしいその場合、Time.zone.now
を 出力すると
p "Task Start - #{Time.zone.now}" # "Task Start - 2018-10-10 15:44:34 +0900"
という形で出力されてしまう、これだと小数点以下の秒数は切り落とされてしまう、そのためログに出力した文字列からは計算できない。
丁寧に strftime
でフォーマットを埋めるのも一つの方法だが、ここでおすすめなのは iso8601
を使う方法です。
# iso8601({{欲しい小数点桁数}}) で取る p Time.zone.now.iso8601(6) # "2018-10-10T16:00:48.193336+09:00"
これを使えば in_time_zone
での変換は容易だし、strftime
で逐一設定する手間が省ける。