Ruby on rails RubyonRails-YouTubeAPI-如何格式化ISO 8601(PT45S)的持续时间

Ruby on rails RubyonRails-YouTubeAPI-如何格式化ISO 8601(PT45S)的持续时间,ruby-on-rails,ruby,datetime,youtube-api,iso8601,Ruby On Rails,Ruby,Datetime,Youtube Api,Iso8601,我到处找,似乎找不到一个直接的答案。基本上,我调用YouTube API并获取JSON文档,然后对其进行解析。其他一切都很好,但我不知道如何解析“duration”属性以将其显示为人类可读的 “持续时间”字段显示为“PT1H5M34S”-1小时5分34秒 或者可能是“PT24S”-24秒 或“PT4M3S”-4分3秒 在Ruby中必须有一种方法来解析这个字符串并使其可读,这样我就可以在循环中动态地传递持续时间并转换它。非常感谢您的帮助或指导。我尝试过使用Date.parse、Time.parse

我到处找,似乎找不到一个直接的答案。基本上,我调用YouTube API并获取JSON文档,然后对其进行解析。其他一切都很好,但我不知道如何解析“duration”属性以将其显示为人类可读的

“持续时间”字段显示为“PT1H5M34S”-1小时5分34秒

或者可能是“PT24S”-24秒

或“PT4M3S”-4分3秒


在Ruby中必须有一种方法来解析这个字符串并使其可读,这样我就可以在循环中动态地传递持续时间并转换它。非常感谢您的帮助或指导。我尝试过使用Date.parse、Time.parse、Date.strtime以及许多其他东西。。。就像从字符串中提取PT并显示它一样,但这似乎不正确。

试试arnau的ISO8601解析器()

用法:

 d = ISO8601::Duration.new('PT1H5M34S')
 d.to_seconds # => 3934.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
您可以使用Rails

parsed_duration = ActiveSupport::Duration.parse(youtube_duration)

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