Ruby on Rails - API YouTube - Как отформатировать продолжительность ISO 8601 (PT45S)

Я искал высоко и низко и не могу найти прямого ответа на этот вопрос. По сути, я вызываю API YouTube и получаю документ JSON, а затем анализирую его. Все остальное хорошо, но я не понимаю, как проанализировать свойство «длительность», чтобы отобразить его в удобочитаемом виде.

Поле «длительность» выглядит как «PT1H5M34S» — 1 час 5 минут 34 секунды.

Или это может быть "ПТ24С" - 24 секунды.

Или "ПТ4М3С" - 4 минуты 3 секунды

В Ruby должен быть способ разобрать эту строку и сделать ее удобочитаемой для человека, чтобы я мог просто передать длительность на лету в своем цикле и преобразовать ее. Любая помощь или руководство приветствуется. Я пробовал использовать Date.parse, Time.parse, Date.strptime, а также многие другие вещи... Например, просто gsub-извлечение PT из строки и его отображение, но это не кажется правильным.


person Matthew G    schedule 08.10.2014    source источник


Ответы (3)


Попробуйте парсер Arnau ISO8601 (https://github.com/arnau/ISO8601)

Использование:

 d = ISO8601::Duration.new('PT1H5M34S')
 d.to_seconds # => 3934.0
person jlmcdonald    schedule 10.10.2014

Простой подход, чтобы получить количество секунд для видео менее 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
person Dan    schedule 06.06.2016

Вы можете использовать Rails ActiveSupport::Duration.

parsed_duration = ActiveSupport::Duration.parse(youtube_duration)

Time.at(parsed_duration).utc.strftime('%H:%M:%S')
person KahTim    schedule 09.02.2021