Ruby on Rails - YouTube API - 如何格式化持续时间ISO 8601(PT45S)

时间:2014-10-08 16:40:03

标签: ruby-on-rails ruby datetime youtube-api iso8601

我已经搜索过高低,似乎无法找到答案。基本上,我调用YouTube API并获取JSON文档,然后解析它。其他一切都很好,但我不明白如何解析“#”持续时间'将其显示为人类可读的属性。

'持续时间'字段来自' PT1H5M34S' - 1小时5分34秒

或者它可能是' PT24S' - 24秒

或者' PT4M3S' - 4分3秒

在Ruby中必须有一种方法来解析这个字符串并使其具有人类可读性,以便我可以在循环中传递持续时间并转换它。非常感谢任何帮助或指导。我尝试过使用Date.parse,Time.parse,Date.strptime以及许多其他内容......就像只是将PT输出字符串并显示它一样,但这看起来并不像右。

3 个答案:

答案 0 :(得分:7)

尝试使用arnau的ISO8601解析器(https://github.com/arnau/ISO8601

用法:

 d = ISO8601::Duration.new('PT1H5M34S')
 d.to_seconds # => 3934.0

答案 1 :(得分:0)

获取视频播放时间少于24小时的简单方法:

dur = "PT34M5S"
pattern = "PT"
pattern += "%HH" if dur.include? "H"
pattern += "%MM" if dur.include? "M"
pattern += "%SS"
DateTime.strptime(dur, pattern).seconds_since_midnight.to_i

答案 2 :(得分:0)

您可以使用 Rails ActiveSupport::Duration

parsed_duration = ActiveSupport::Duration.parse(youtube_duration)

Time.at(parsed_duration).utc.strftime('%H:%M:%S')