我在这个网站上找到了一个倒计时器,它在linux上运行良好,但我需要在Ruby中完成这件事。我是ruby的新手,因此无法解决这个问题。
==Linux version==
seconds=20; date1=$((`date +%s` + $seconds));
while [ "$date1" -ne `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s` )) +%H:%M:%S)\r";
done
到目前为止,我已经尝试了这个并没有给我所需的输出
t = Time.now
seconds = 30
date1 = (t + seconds)
while t != date1
puts t
sleep 1
end
这给出了这样的输出,A)没有倒计时,B)添加了我不想要的日期。
2015-05-28 09:57:18 -0500
2015-05-28 09:57:18 -0500
2015-05-28 09:57:18 -0500
2015-05-28 09:57:18 -0500
我希望它输出类似于这个
的linux版本 00:00:30
00:00:29
00:00:28
答案 0 :(得分:2)
尝试此操作,如果您只需要输出并且不使用任何与时间相关的信息:
30.downto(0) do |i|
puts "00:00:#{'%02d' % i}"
sleep 1
end
随着时间的推移(第一稿):
t = Time.new(0)
countdown_time_in_seconds = 300 # change this value
countdown_time_in_seconds.downto(0) do |seconds|
puts (t + seconds).strftime('%H:%M:%S')
sleep 1
end
答案 1 :(得分:0)
试试这个:
def countdown(seconds)
date1 = Time.now + seconds
while Time.now < date1
t = Time.at(date1.to_i - Time.now.to_i)
p t.strftime('%H:%M:%S')
sleep 1
end
end
这是一个额外的一小时到达...不确定为什么会这样,但最重要的是在整个过程中使用Time.now
。
编辑如果您不想将其用作方法,则只需使用内部代码:
date1 = Time.now + 5 # your time here
while Time.now < date1
t = Time.at(date1.to_i - Time.now.to_i)
p t.strftime('%H:%M:%S')
sleep 1
end
答案 2 :(得分:0)
我最后使用了第一种方法dax,但删除了%H,这让我可以用更长的时间来调用它
def countdown(seconds)
date1 = Time.now + seconds
while Time.now < date1
t = Time.at(date1.to_i - Time.now.to_i)
puts t.strftime('%M:%S')
sleep 1
end
end