ruby-on-rails - Rails 中的时间码 - 时间还是数值?

标签 ruby-on-rails datetime timecodes

我正在开展一个项目,该项目将数据存储在音轨上,并且需要使用时间码作为音频 rails 的起点和终点。我还需要计算并显示轨道的持续时间。例如。轨道从 0:01:30 开始,到 0:04:12 结束。所以它的持续时间总共是 2 分 42 秒。

诀窍在于所有内容都需要作为时间码显示和处理,因此在上面的示例中,持续时间需要显示为 0:02:42。

所以我的问题是您将如何存储这些值?最简单的选择是将开始和结束时间作为时间存储在数据库中。计算持续时间非常容易,您可以在表单中使用 Rails 时间助手。唯一痛苦的部分是将持续时间转回显示的时间值(因为如果我只向 strptime 提供秒数,它会继续使用当前时间来填充其他字段)

我考虑的另一个选项是将它们存储为数值(如秒数)。但是我必须编写大量代码来将它们与某种类型的时间码格式相互转换,而且我无法使用 Rails 时间助手。

还有什么我没有考虑过的想法吗?有没有一种简单的方法来计算持续时间并将其显示为时间码格式?

最佳答案

我会将它们存储为秒或毫秒。我一直在用 Ruby 开发音乐库管理器/音频播放器,实际上我必须编写您需要的两种方法。没有那么多代码:

  # Helper method to format a number of milliseconds as a string like
  # "1:03:56.555". The only option is :include_milliseconds, true by default. If
  # false, milliseconds won't be included in the formatted string.
  def format_time(milliseconds, options = {})
    ms = milliseconds % 1000
    seconds = (milliseconds / 1000) % 60
    minutes = (milliseconds / 60000) % 60
    hours = milliseconds / 3600000

    if ms.zero? || options[:include_milliseconds] == false
      ms_string = ""
    else
      ms_string = ".%03d" % [ms]
    end

    if hours > 0
      "%d:%02d:%02d%s" % [hours, minutes, seconds, ms_string]
    else
      "%d:%02d%s" % [minutes, seconds, ms_string]
    end
  end

  # Helper method to parse a string like "1:03:56.555" and return the number of
  # milliseconds that time length represents.
  def parse_time(string)
    parts = string.split(":").map(&:to_f)
    parts = [0] + parts if parts.length == 2
    hours, minutes, seconds = parts
    seconds = hours * 3600 + minutes * 60 + seconds
    milliseconds = seconds * 1000
    milliseconds.to_i
  end

它是以毫秒为单位编写的,如果将其更改为以秒为单位会简单得多。

关于ruby-on-rails - Rails 中的时间码 - 时间还是数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962726/

相关文章:

ruby-on-rails - Ruby/Rails - 限制对象/哈希的大小

java - 如何在 Android 中从 sqlite 数据库存储和检索日期?

SQL - 将 24 小时 ("military") 时间 (2145) 转换为 "AM/PM time"(9 :45 pm)

bash - 如何关闭 OS X bash 时间码中的冒号

c - 如何获取 Quicktime 电影的开始时间码 (SMPTE)?

bash - awk - 检查时间码

ruby-on-rails - 点击计数 rails 中的链接文章

ruby-on-rails - 清理 SQL 语句中的存储过程调用

ruby-on-rails - 使用 Devise 将可确认模块添加到现有站点

c# - 两个日期之间的天数、小时数、分钟数、秒数