Ruby倒计时器

时间:2015-05-28 14:48:21

标签: ruby

我在这个网站上找到了一个倒计时器,它在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

3 个答案:

答案 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