Rails:保存视频时间的正确方法是什么?

时间:2014-11-15 12:57:14

标签: ruby-on-rails

每个视频都有一段时间。例如,对于每个YouTube视频,它的持续时间可能是4分钟或30秒。

问题是如何将其保存到数据库中?

只需将其存储为string 4:30?或者将其更改为秒并将其存储为integer?然后,我该如何将其更改回minute:second格式?

附加说明:

现在我正在制作一个视频聚合器,所以时间实际上是seconds: 30,或者只是像4:30这样的简单格式,那我怎样才能将后一种格式变成秒整数? / p>

2 个答案:

答案 0 :(得分:1)

保持时间的方式取决于您的业务逻辑。 我宁愿在几秒钟内保持长度,然后转换为分钟,小时等。 你可以通过简单的决策轻松完成:

minutes = (seconds / 60)
seconds_left = (seconds % 40)
human_time = "#{minutes}:#{seconds_left}"

答案 1 :(得分:1)

您可以使用Time类来解析时间字符串。

require 'date' # Only needed outside of rails!
require 'active_support/all' # Only needed outside of rails!

video_length = "04:30"

# This ensures the format of video_length is HH:MM:SS
def hours_minutes_seconds(str) 
    parts = str.split(':').reverse
    len = parts.length
    if ! parts.length || parts.length > 3
        raise("bad input (#{str}) for hours_minutes_seconds") and return
    end
    (0..2).map do |i|
        part = parts[len -i]
        part || "00"
    end.join(':')
end

#Remember how unix time starts at 1 Jan 1970?
time = DateTime.iso8601( "1970-01-01T#{hours_minutes_seconds(video_length)}Z" )

# Lets print it out!
puts time.utc.strftime("%H:%M:%S") # 00:04:30

然后,您可以将值存储为秒数[整数]。在几秒钟内从长度中获取时间对象很容易。

puts Time.at(seconds).utc.strftime("%H:%M:%S") # 00:04:30