Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Rubyで日付減算処理

  • 概要

Rubyで終了日時から開始日時を減算し、処理結果をhour時間min分sec秒形式で出力する処理を作成。
開始時間と終了時間の差が1日以上ある場合と開始日時のほうが終了日時より大きい場合は不正とする。
Rubyは今日始めたばかりなのでひどい実装の可能性大

  • サンプル
#開始時間
timeFrom = Time.mktime(2012,1,15,15,50,10)
#終了時間
timeTo = Time.mktime(2012,1,16,15,50,9)

print("開始時刻:" , timeFrom, "\n")
print("終了時刻:" , timeTo, "\n")

# 比較結果(秒単位)
dateDiff = timeTo - timeFrom

case dateDiff
# 比較結果
when 0..86399
	diffHour = (dateDiff/3600).to_i
	diffMinute = ((dateDiff-(3600*diffHour))/60).to_i
	diffSec = (dateDiff-(60*(diffMinute))-(3600*(diffHour))).to_i
	print(diffHour, "時間" ,diffMinute, "" , diffSec, "")
# 比較結果(エラー)
else
	print("時刻が不正です\n")
end
  • 出力結果
開始時刻:2012-01-15 15:50:10 +0900
終了時刻:2012-01-16 15:50:09 +0900
23時間59分59秒

■以下、時間を色々変えた場合

  • 秒単位

#開始時間
timeFrom = Time.mktime(2012,1,15,15,50,10)
#終了時間
timeTo = Time.mktime(2012,1,15,15,50,11)

出力結果

開始時刻:2012-01-15 15:50:10 +0900
終了時刻:2012-01-15 15:50:11 +0900
0時間0分1秒
  • 分単位

#開始時間
timeFrom = Time.mktime(2012,1,15,15,50,10)
#終了時間
timeTo = Time.mktime(2012,1,15,15,51,11)

出力結果

開始時刻:2012-01-15 15:50:10 +0900
終了時刻:2012-01-15 15:51:11 +0900
0時間1分1秒
  • 不正日付1(マイナス)

#開始時間
timeFrom = Time.mktime(2012,1,15,15,50,10)
#終了時間
timeTo = Time.mktime(2012,1,15,15,50,9)

出力結果

開始時刻:2012-01-15 15:50:10 +0900
終了時刻:2012-01-15 15:50:09 +0900
時刻が不正です
  • 不正日付1(1日以上)

#開始時間
timeFrom = Time.mktime(2012,1,15,15,50,10)
#終了時間
timeTo = Time.mktime(2012,1,16,15,50,10)

出力結果

開始時刻:2012-01-15 15:50:10 +0900
終了時刻:2012-01-16 15:50:10 +0900
時刻が不正です