Дополнения Time Class Ruby - PullRequest
0 голосов
/ 24 октября 2019

У меня проблемы. Я был бы очень признателен, если бы вы могли мне помочь.

Я должен сложить и вычесть времена с помощью ruby. У меня есть хэш, в котором указано время каждого этапа участников, но я должен добавить время, чтобы получить окончательное время. Я прилагаю коды, которые я сделал, чтобы попробовать.

 {"Name"=>"Jhon doe", "Stage 1"=>"07:18.713", "Stage 2"=>"07:31.602", "Stage 3"=>"07:37.464", "Stage 4"=>"09:58.272", "Stage 5"=>"06:47.872", "Stage 6"=>"07:35.579"}

Проблема в том, что при выполнении сложения он распознает меня внутри хеш-функции как строку, есть ли способ преобразовать его во время иуметь делать сложение и вычитание?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

большое спасибо за помощь, я нашел в разных постах и ​​сумел решить мою проблему. Я оставляю ответ на случай, если вы сможете кому-то помочь. Наконец мне пришлось преобразовать все в миллезимы секунд, добавить время и затем преобразовать обратно в формат времени. Это было все вручную, добавьте «ЕСЛИ», потому что мне нужно, чтобы оно выглядело так. Может быть, это не самый лучший способ, но мне удалось решить мою проблему. Спасибо всем.

 t = 426475
 ss, ms = t.divmod(1000)          
 mm, ss = ss.divmod(60)           
 hh, mm = mm.divmod(60)          
 dd, hh = hh.divmod(24) 

 if hh<10
     hh = "0"+hh.to_s
 else
     hh = hh.to_s
 end

 if mm<10
     mm = "0"+mm.to_s
 else
     mm = mm.to_s
 end

 if ss<10
     ss = "0"+ss.to_s
 else
     ss = ss.to_s
 end

 if ms <10
     ms = "00"+ms.to_s
 else
     if  ms<100
      ms = "0"+ms.to_s
     else
      ms = ms.to_s
 end
end


if hh == "00"
     puts mm+":"+ss+"."+ms

else
     puts hh+":"+mm+":"+ss+"."+ms
end
#=> 07:06.475
0 голосов
/ 24 октября 2019

Вы можете использовать Time::parse или Time::strptime в стандартной библиотеке Time для анализа строки.

require 'time'

string = "07:18.713"
time   = Time.strptime(string, '%R')
#=> 2019-10-24 07:18:00 +0200

Когда вы делаете это для несколькихраз вы можете захотеть передать ему аргумент "сейчас". Представьте, что код выполняется незадолго до полуночи, а затем во время итерации день переходит вперед, изменяя аргумент «сейчас» для оставшейся части цикла:

hash =  {"Name"=>"Jhon doe", "Stage 1"=>"07:18.713", "Stage 2"=>"07:31.602", "Stage 3"=>"07:37.464", "Stage 4"=>"09:58.272", "Stage 5"=>"06:47.872", "Stage 6"=>"07:35.579"}
now = Time.now # Save the current time in a variable so all parsing uses
               # the same now time.

stage_times = hash.slice(*'Stage 1'..'Stage 6')
stage_times.transform_values! { |time| Time.strptime(time, '%R', now) }

result = hash.merge(stage_times)
#=> {"Name"=>"Jhon doe", "Stage 1"=>2019-10-24 07:18:00 +0200, "Stage 2"=>2019-10-24 07:31:00 +0200, "Stage 3"=>2019-10-24 07:37:00 +0200, "Stage 4"=>2019-10-24 09:58:00 +0200, "Stage 5"=>2019-10-24 06:47:00 +0200, "Stage 6"=>2019-10-24 07:35:00 +0200}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...