Conversor de duração ISO 8601

Converta a notação de duração ISO 8601 (ex.: PT1H30M) em segundos totais e vice-versa. Útil para interpretar formatos usados pela API do YouTube, tempos limite da AWS e feeds RSS de podcasts.

Exemplos comuns de duração ISO 8601

Uma duração ISO 8601 começa com "P", seguido de anos/meses/dias, e depois "T" seguido de horas/minutos/segundos. Abaixo estão exemplos comuns e os segundos que representam.

Notação Total de segundos Observação
PT30S 30 Um valor típico de tempo limite curto, como 30 segundos
PT1H30M 5,400 1 hora e 30 minutos — forma comum de expressar a duração de um filme ou de um vídeo do YouTube
P1D 86,400 1 dia (24 horas) — frequentemente usado para períodos de retenção de logs ou expiração de cache
P3Y6M4DT12H30M5S 110,842,205 Um exemplo combinado equivalente a 3 anos, 6 meses, 4 dias, 12 horas, 30 minutos e 5 segundos (anos/meses usam a aproximação de 365,25 dias)

Dicas

  • Durações que incluem anos ou meses não têm, na realidade, um número fixo de segundos, então esta ferramenta usa uma aproximação fixa: 1 ano = 365,25 dias e 1 mês = 30,44 dias.
  • Ao gerar uma string de duração a partir de segundos, escolha "apenas dias/horas/minutos/segundos" para evitar totalmente a aproximação de anos/meses e obter um resultado exato e independente do calendário.
  • A API de Dados do YouTube retorna a duração do vídeo no campo contentDetails.duration usando notação ISO 8601, então você pode colá-la diretamente aqui para obter o total em segundos.
  • Serviços em nuvem como AWS Lambda e API Gateway às vezes usam notação de duração ISO 8601 para configurar tempos limite, o que torna esta ferramenta útil para verificar esses valores.
  • Feeds RSS de podcasts às vezes usam o formato de duração ISO 8601 na tag itunes:duration, além do formato hh:mm:ss mais comum.

Perguntas frequentes

PT1H30M é a notação de duração ISO 8601 para "1 hora e 30 minutos". O "P" marca o início de um período, e o "T" marca o início da parte de tempo (horas/minutos/segundos) — isso importa porque, sem o "T", "1M" significa "1 mês", enquanto após o "T" significa "1 minuto".

Exemplos conhecidos incluem o campo de duração de vídeo da API de Dados do YouTube (contentDetails.duration), configurações de tempo limite e expiração em serviços de nuvem como AWS e Google Cloud, e feeds RSS de podcasts (itunes:duration). Muitas linguagens de programação também suportam sua análise e geração, como as classes Duration/Period do Java e a biblioteca isodate do Python.

Um ano tem 365 ou 366 dias, dependendo se é bissexto, e um mês varia de 28 a 31 dias, portanto nenhum dos dois tem um número fixo de segundos. Esta ferramenta usa 365,25 dias como média prática para um ano (e um duodécimo disso, cerca de 30,44 dias, para um mês). Se precisar de um resultado exato, use o modo "exato", que expressa durações apenas com dias, horas, minutos e segundos.

Sim, notações como "P2W" (2 semanas) são suportadas. Observe que, segundo a especificação ISO 8601, a notação de semanas é uma abreviação independente que não pode ser combinada com componentes de ano/mês/dia ou com a parte de tempo.

Se a entrada não começar com "P", as unidades estiverem fora de ordem (devem seguir A→M→D e, após o "T", H→M→S), ou todas as unidades forem omitidas (uma duração vazia), a ferramenta determina que a string não pode ser convertida e exibe uma mensagem de erro em vez de um resultado.
ツールくん

Curiosidade — Por que o mundo da computação tem um formato dedicado para "durações"?

A ISO 8601 é mais conhecida como o padrão internacional para representar datas e horas, mas o mesmo padrão também define uma notação separada para "durações" — o intervalo de tempo entre dois pontos, em vez de um único instante. Uma data-hora responde "quando", enquanto uma duração responde "por quanto tempo", e embora pareçam semelhantes à primeira vista, representam tipos de informação fundamentalmente diferentes. A notação dedicada iniciada por "P" existe justamente para manter essa distinção clara.

Um dos motivos pelos quais a notação de duração é tão útil na prática é que ela evita erros de incompatibilidade de unidades ao trocar dados entre sistemas. Se uma resposta de API simplesmente retornasse o número "30", quem a recebesse teria que consultar a documentação para saber se isso significa segundos ou minutos. Com "PT30S", o valor e sua unidade viajam juntos em uma única string, de modo que um analisador correto nunca pode interpretá-la incorretamente.

É exatamente por isso que a API de Dados do YouTube retorna a duração do vídeo em formato ISO 8601: uma string como "PT4M13S" significa, sem ambiguidade, um vídeo de 4 minutos e 13 segundos. Plataformas de nuvem como AWS e Google Cloud às vezes adotam o mesmo formato para configurações de tempo limite e expiração, então, se você notar essa notação em um arquivo de configuração YAML ou em uma resposta JSON, passá-la por esta ferramenta para ver o número equivalente de segundos pode ajudar a visualizar melhor o valor.

Ao mesmo tempo, o padrão tem uma peculiaridade interessante: durações que incluem anos ou meses não têm um comprimento absoluto fixo. O mesmo "P1Y" pode representar 365 ou 366 dias reais, dependendo se abrange um ano bissexto. No fim das contas, é exatamente por isso que esta ferramenta precisa recorrer a uma aproximação sempre que uma conversão envolve anos ou meses.