在Rails 3中将时间DD:hh:mm:ss格式转换为秒

时间:2013-09-09 16:36:02

标签: ruby-on-rails postgresql ruby-on-rails-3.2 ruby-1.9.3 time-format

我需要得到DD的时间值:hh:mm:ss到秒。值是postgresql db查询的输出,看起来像这样:

db_value = '456:14:56:10'

我需要把它变成几秒钟,我的应用程序中有一个方法,反之亦然:

def time_converter(seconds)
  days = seconds / 86400
  seconds -= days * 86400
  hours = seconds / 3600
  seconds -= hours * 3600         
  minutes = seconds / 60
  seconds -= minutes * 60
  return "#{days}:#{hours}:#{minutes}:#{seconds}"

我可以以某种方式使用此方法,还是可以将postgresql中的格式更改为秒?最有效的方法是什么?

db值是SUM((end_time - start_time)*乘数)AS持续时间查询的一部分。

1 个答案:

答案 0 :(得分:2)

你没有说明你使用的是哪个版本的红宝石,所以我假设现代的东西。这应该适用于1.9.3或更高版本。这也假定您总是存在所有4个字段。无论如何它应该给你一些想法。

> db_value = '456:14:56:10'
=> "456:14:56:10"
> units = %w{days hours minutes seconds}
=> ["days", "hours", "minutes", "seconds"]
> db_value.split(":").map.with_index{|x,i| x.to_i.send(units[i])}.reduce(:+).to_i
=> 39452170