Techioz Blog

ルビィ:時間を秒に換算すると?

概要

10:30 のような時間を秒に変換するにはどうすればよいですか?それを処理するための何らかの組み込みのRuby関数はありますか?

基本的には、午前 0 時 (00:00) からその日の特定の時刻 (10:30 や 18:45 など) までの秒数を計算しようとしています。

解決策

DateTime#parse を使用して文字列を DateTime オブジェクトに変換し、時間を 3600 で乗算し、分を 60 で乗算して秒数を取得します。

require 'date'

# DateTime.parse throws ArgumentError if it can't parse the string
if dt = DateTime.parse("10:30") rescue false 
  seconds = dt.hour * 3600 + dt.min * 60 #=> 37800
end

Josh Lee がコメントで指摘したように、ActiveSupport を使用している場合は、Time#seconds_since_midnight を使用することもできます。

require 'active_support'
Time.parse("10:30").seconds_since_midnight #=> 37800.0