Реализация поставщиков LINQ главным образом сделана путем обработки деревьев выражений. Я также использую их для удаления литеральных строк из моего кода:
Мы называем эти «ведущие» символы, а не замыкающие, так как они находятся в начале, но регулярное выражение для этого очень просто
x.sub(/^[0:]*/,"")
Это работает именно так, как вы это сформулировали: начиная с в начале строки удалите все 0 и: s.
РЕДАКТИРОВАТЬ: OP хотел этого с самого начала:
seconds = 11*60+40
Time.at(seconds.to_i).gmtime.strftime('%M:%S') # gives '11:40'
или см. man strftime
для получения дополнительных параметров форматирования.
EDIT: включая все обсуждения, вот рекомендуемый подход. Это также устраняет необходимость в вызове Time.
seconds = seconds.to_i
if seconds >= 60
"#{seconds/60}:#{seconds%60}"
else
"#{seconds}"
end
Тег noscript
работает наоборот. Чтобы сделать содержимое видимым, когда скрипт включен, поместите его в скрытый элемент и покажите его с помощью скрипта:
Хороший ссылка
it "should look-behind for zeros" do
time = remove_behind_zeroes("ta:da:na")
time.should be_nil
time = remove_behind_zeroes("22:43:20")
time.should == "22:43:20"
time = remove_behind_zeroes("00:12:30")
time.should == "12:30"
time = remove_behind_zeroes("00:11:40")
time.should == "11:40"
time = remove_behind_zeroes("00:02:40")
time.should == "2:40"
time = remove_behind_zeroes("00:00:26")
time.should == "26"
конец
def remove_behind_zeroes(value)
exp = /(?<=00:00:)\d\d/
match = exp.match(value)
if match then return match[0] end
exp = /(?<=00:0)\d:\d\d/
match = exp.match(value)
if match then return match[0] end
exp = /(?<=00:)\d\d:\d\d/
match = exp.match(value)
if match then return match[0] end
exp = /\d\d:\d\d:\d\d/
match = exp.match(value)
if match then return match[0] end
nil
конец
Вы можете использовать что-то вроде того, что сказал Питер, но правильно будет:
s = "00:11:40"
s = s[3..-1] # 11:40
Другим подходом было бы использование метода разделения:
s = "00:11:40".split(":")[1,2].join(":")
Хотя я считаю этот метод более запутанным и сложным.