Ruby on rails RubyonRails-YouTubeAPI-如何格式化ISO 8601(PT45S)的持续时间
我到处找,似乎找不到一个直接的答案。基本上,我调用YouTube API并获取JSON文档,然后对其进行解析。其他一切都很好,但我不知道如何解析“duration”属性以将其显示为人类可读的 “持续时间”字段显示为“PT1H5M34S”-1小时5分34秒 或者可能是“PT24S”-24秒 或“PT4M3S”-4分3秒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
在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')