El estándar ISO 8601 define no solo un formato de fechas, sino también un formato para escribir duraciones — una cadena como PT1H30M, que describe de forma inequívoca y legible por máquina "1 hora 30 minutos".
La estructura del formato
La cadena siempre empieza con la letra P (period). Los componentes de fecha (años, meses, días) van justo después de P, mientras que los componentes de tiempo (horas, minutos, segundos) van después de la letra T, que separa la parte de fecha de la de tiempo. Por ejemplo, P2DT4H significa "2 días y 4 horas".
Por qué se necesita la letra T
Sin el separador T, la letra M sería ambigua — representa tanto meses (en la parte de fecha) como minutos (en la parte de tiempo). Por eso P1M significa "1 mes", mientras que PT1M significa "1 minuto".
Cuando una base de datos entiende ISO 8601 directamente
El tipo interval de PostgreSQL acepta cadenas con formato ISO 8601 duration como entrada válida, además de su propia sintaxis más flexible tipo "2 days 4 hours". Eso significa que se puede escribir directamente INTERVAL 'P2DT4H' en una consulta SQL y la base de datos lo interpretará sin necesidad de convertirlo antes en la aplicación.
Para qué se necesita esto
- Descifrar la duración de un video o evento a partir de la respuesta de una API externa.
- Generar una cadena de duración ISO 8601 válida para tu propia API o feed de datos.
- Convertir duraciones entre un formato legible por humanos y la notación ISO legible por máquina.
Segundos decimales en la notación
El estándar ISO 8601 permite una parte decimal solo en el último (el más pequeño) componente de la cadena — por ejemplo, PT1.5S significa "1,5 segundos", y PT1H30.5M significa "1 hora 30,5 minutos". El estándar no contempla una parte decimal en ningún componente que no sea el último.