# 日付・時間 require 'date' # 日付 add on date.rb class Date def ymd() strftime('%Y%m%d') end # YYYYMMDD def ymd_slash() strftime('%Y/%m/%d') end # YYYY/MM/DD def ymd_under() strftime('%Y_%m_%d') end # YYYY_MM_DD def getwday() Date.parse(self).wday end # 入力日の曜日 # 日:以前の指定曜日 def wday_before(set_wday) unless self.wday == set_wday # 開始日が指定曜日以外 return self - self.wday + set_wday # 直前の指定曜日オブジェクト end return self end # 日:以降の指定曜日 def wday_after(set_wday) unless self.wday == set_wday # 終了日が指定曜日以外 return self + (7 - self.wday + set_wday) # 直後の指定曜日オブジェクト end return self end # このメソッドは再計算せずキャッシュする once :ymd_slash, :ymd_under, :ymd, :wday_before, :wday_after end # 時間文字列 hh:mm:ss # 時間文字列の差 def time_diff(first_time, second_time) diff_time = str2sec(first_time) - str2sec(second_time) return sec2str(diff_time) end # 時間文字列の和 def time_add(first_time, second_time) add_time = str2sec(first_time) + str2sec(second_time) return sec2str(add_time) end # 時間文字列の商 def time_div(first_time, divine) if str2sec(divine) == 0 print "0除算になります。 at time_div\n" exit end div_time = str2sec(first_time) / divine return sec2str(div_time) end # 時間文字列を秒に変換 def str2sec(str_time) (hour, min, sec) = str_time.split(/:/) sec_time = (hour.to_i * 3600) + (min.to_i * 60) + sec.to_i return sec_time # 秒 end # 秒を時間文字列に変換 def sec2str(sec_time) hour = sec_time / 3600 min = (sec_time / 60) - (hour * 60) # 分(60分超えた分は引く) sec = sec_time % 60 return sprintf("%d:%02d:%02d", hour, min, sec) end # 時間文字列同士の時間の差 # Cのstrcmp()と同じような使い方を想定。 # 第一引数と第2引数を比較して第一引数が大きければ正、 # 第二引数が大きければ負、等しければ0を返します。 def timecmp(first_time, second_time) diff_time = str2sec(first_time) - str2sec(second_time) return diff_time # 秒 end