Zastanawiam się, czy istnieje wbudowana metoda w Rubim, która pozwala mi konwertować czasy okrążeń w formacie hh: mm: ss. sss do milisekund i na odwrót. Ponieważ muszę wykonać z nim kilka obliczeń, założyłem, że najłatwiej będzie to zrobić z konwersją na milisekundy. Powiedz mi, czy się mylę :)Konwertuj czasy trwania w Ruby - hh: mm: ss.sss do milisekund i na odwrót
7
A
Odpowiedz
8
Co powiesz na to?
a=[1, 1000, 60000, 3600000]*2
ms="01:45:36.180".split(/[:\.]/).map{|time| time.to_i*a.pop}.inject(&:+)
# => 6336180
t = "%02d" % (ms/a[3]).to_s << ":" <<
"%02d" % (ms % a[3]/a[2]).to_s << ":" <<
"%02d" % (ms % a[2]/a[1]).to_s << "." <<
"%03d" % (ms % a[1]).to_s
# => "01:45:36.180"
3
Ponieważ całkowicie ignorujesz datę i prawdopodobnie masz liczbę większą niż 24 jako liczbę godzin, być może istniejące klasy Ruby nie są dla Ciebie odpowiednie (przynajmniej te ze standardu lib).
W rzeczywistości istnieje kilka metod, które mogą być pomocne: time_to_day_fraction i day_fraction_to_time, ale z jakiegoś powodu są prywatne (przynajmniej w wersji 1.9.1).
więc można albo małpa-załatać je do ich publikowania, lub po prostu skopiować i wkleić ich realizację do kodu:
def time_to_day_fraction(h, min, s)
Rational(h * 3600 + min * 60 + s, 86400) # 4p
end
def day_fraction_to_time(fr)
ss, fr = fr.divmod(Rational(1, 86400)) # 4p
h, ss = ss.divmod(3600)
min, s = ss.divmod(60)
return h, min, s, fr
end
Pracują z Rational
klasy, więc można obliczyć łatwo z nimi.
0
Convert seconds into HH:MM:SS in Ruby
t = 323 # seconds
Time.at(t).utc.strftime("%H:%M:%S")
=> "00:03:56"
Która obliczenia trzeba zrobić? Klasa Ruby 'DateTime' jest bardzo przydatna w przypadku większości typów obliczeń. –
Dodawanie i odejmowanie w ogóle. Oprócz tego czasy te są związane z pewną intensywnością, na przykład: "02: 25.700 przy 70% intensywności". Na podstawie tego czasu musiałbym obliczyć teoretyczny czas na 100% intensywności. Ze względu na kompletność: czasy te nie są związane z określoną datą. – herrherr