在Ruby 2.4中使用Rails 5.0.1。我有一个方法,以毫秒为单位显示格式化字符串。
~$ docker exec -it apksplashcompose_splash_1 /bin/bash
root@b091fbef4c78:/# cd /etc/splash/proxy-profiles
root@b091fbef4c78:/etc/splash/proxy-profiles# ls
proxy.ini
root@b091fbef4c78:/etc/splash/proxy-profiles# cat proxy.ini
[proxy]
host=tor-privoxy
port=8118
但是,我有点麻烦,因为如果分钟或秒字段为零,则输出显示为" 0"而不是" 00"。例如,如果我用调用该函数
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
(即24小时内的毫秒数),输出为
86400000
但我希望它是
"24:0:0.0"
同样,如果输入是
"24:00:00"
输出应该是
1000
因为一千毫秒等于一秒。如果需要,如何正确格式化输出以包含两个零?
答案 0 :(得分:0)
您可以按如下方式使用它:
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
字符串。
我认为您应该在format/interpolate
字符串之前确定ms保留的内容,这样您就不需要在format
数组中调用三元运算符。