如何格式化持续时间字符串以在零字段中包含两个零?
How do I format a duration string to include two zeroes for a zero field?
使用 Rails 5.0.1 和 Ruby 2.4。我有一种方法可以将持续时间(以毫秒为单位)显示为格式化字符串。
def time_as_str(time_in_ms)
secs, ms = time_in_ms.divmod(1000)
mins, secs = secs.divmod(60)
hours, mins = mins.divmod(60)
s = "%d:%d:%d.%s" % [hours, mins, secs, ms.zero? ? "0" : ms.to_s.sub(/0*\z/,'')]
if hours > 0
s
elsif mins > 0
s[2..-1]
else
s[4..-1]
end
end
不过我遇到了一点麻烦,因为如果分钟或秒字段为零,输出将显示为“0”而不是“00”。例如,如果我用
调用函数
86400000
(即24小时的毫秒数),输出为
"24:0:0.0"
但我希望它是
"24:00:00"
同样如果输入是
1000
输出应该是
"1"
因为一千毫秒等于一秒。如有必要,如何正确格式化我的输出以包含两个零?
您可以按如下方式使用:
def time_as_str(time_in_ms)
secs, ms = time_in_ms.divmod(1000)
mins, secs = secs.divmod(60)
hours, mins = mins.divmod(60)
s = "%d:%02d:%02d%s" % [hours, mins, secs, ms.zero? ? "" : "."+ms.to_s.sub(/0*\z/,'')]
(hours > 0 ? s : mins > 0 ? s[2..-1] : s[5..-1]).sub(/^0/,"")
end
基本上 % 将插入您传递的任何内容,%d
表示打印为数字,%02d
打印为占用至少 2 位数字的数字,在左侧填充 0 直到至少出现 2 位数字.然后你会想要 %s
在没有 ms
或 ms=0
的情况下实际打印一个空字符串,如果没有打印 ms
的字符串,左边有一个点。
我认为你应该决定 ms 在 format/interpolate
字符串之前保留什么,这样你就不需要在 format
数组中调用三元运算符。
使用 Rails 5.0.1 和 Ruby 2.4。我有一种方法可以将持续时间(以毫秒为单位)显示为格式化字符串。
def time_as_str(time_in_ms)
secs, ms = time_in_ms.divmod(1000)
mins, secs = secs.divmod(60)
hours, mins = mins.divmod(60)
s = "%d:%d:%d.%s" % [hours, mins, secs, ms.zero? ? "0" : ms.to_s.sub(/0*\z/,'')]
if hours > 0
s
elsif mins > 0
s[2..-1]
else
s[4..-1]
end
end
不过我遇到了一点麻烦,因为如果分钟或秒字段为零,输出将显示为“0”而不是“00”。例如,如果我用
调用函数86400000
(即24小时的毫秒数),输出为
"24:0:0.0"
但我希望它是
"24:00:00"
同样如果输入是
1000
输出应该是
"1"
因为一千毫秒等于一秒。如有必要,如何正确格式化我的输出以包含两个零?
您可以按如下方式使用:
def time_as_str(time_in_ms)
secs, ms = time_in_ms.divmod(1000)
mins, secs = secs.divmod(60)
hours, mins = mins.divmod(60)
s = "%d:%02d:%02d%s" % [hours, mins, secs, ms.zero? ? "" : "."+ms.to_s.sub(/0*\z/,'')]
(hours > 0 ? s : mins > 0 ? s[2..-1] : s[5..-1]).sub(/^0/,"")
end
基本上 % 将插入您传递的任何内容,%d
表示打印为数字,%02d
打印为占用至少 2 位数字的数字,在左侧填充 0 直到至少出现 2 位数字.然后你会想要 %s
在没有 ms
或 ms=0
的情况下实际打印一个空字符串,如果没有打印 ms
的字符串,左边有一个点。
我认为你应该决定 ms 在 format/interpolate
字符串之前保留什么,这样你就不需要在 format
数组中调用三元运算符。