Reputation: 9457
I have a string as follows:
"00:48:22"
From right to left, I am working with a power of 60, because I want to get the total number of seconds from hours, minutes, seconds.
This is what I have tried:
clock
=> "00:48:22"
i = 0
result = clock.split(":").reverse.reduce(0) do |acc, segment|
acc += segment.to_i + (60 ** i)
i += 1
acc
end
=> 3731
The result is off. It should be 2902. Any idea what I am doing wrong?
Upvotes: 0
Views: 37
Reputation: 110725
require 'date'
d = Date.today
(Time.new(d.year,d.month,d.day,*str.split(':').map(&:to_i))-d.to_time).to_i
#=> 2902
Upvotes: 0
Reputation: 8898
Your algorithm is a little messy and error prone. This will give you the right answer:
clock = '00:48:22'
clock.split(':').map(&:to_i).reduce(0) do |acc, segment|
acc * 60 + segment
end
Upvotes: 2
Reputation: 80075
You are adding where you should be multiplying
acc += segment.to_i * (60 ** i)
Upvotes: 1