Руби конвертировать сотые секунды для оптимизации метки времени - PullRequest
1 голос
/ 30 марта 2010

Эй! Я хочу преобразовать «123456» в «00: 20: 34.56», где две цифры справа от десятичной точки находятся в сотых долях секунды. Итак, 00: 00: 00.99 + 00: 00: 00.01 = 00: 00: 01.00

Что у меня есть: def to_hmsc (цент) h = (цент / 360000) .этаж цент - = ч * 360000 м = (цент / 6000) цент - = м * 6000 s = (цент / 100) .этаж цент - = с * 100

"# {H}: {# т}:. # {S} # {s}" конец

делает это: to_hmsc ("123456") # => "0: 20: 34.56"

Вопрос 1: Я имею в виду, это рубин, я нахожу часть 'cent - = ...' довольно неуклюжей. Можете ли вы найти способ сократить весь процесс?

Вопрос 2: Об этом уже миллион раз спрашивали, но, пожалуйста, поделитесь тем, что у вас есть: какой самый короткий способ добавить начальный ноль к цифрам. чтобы to_hmsc ("123456") # => "00: 20: 34.56"

Спасибо!

1 Ответ

2 голосов
/ 30 марта 2010
Time.at(123456/100.0).strftime('%H:%M:%S.%2N')
#=> "01:20:34.56"

Кстати, вы должны быть осторожны с типами данных в Ruby, так как это язык строгой типизации. Вы не можете передать строку в метод и ожидать, что она будет работать с ней, поскольку она является числом.

Заполнение нулями может быть сделано несколькими способами. Обычно это выполняется при форматировании строк:

"%04d" % 12
#=> "0012"

Ознакомьтесь с документацией sprintf для полной справки.

PS. Кажется, что %2N не работает в Ruby <= 1.8.7. Так вот уродливая версия: </p>

t=Time.at(123456/100.0)
'%02d:%02d:%02d.%02d' % [t.hour, t.min, t.sec, t.usec/10000]
#=> "01:20:34.56"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...