ISO 8601 기간(Duration) 변환 도구
ISO 8601 기간 표기법(예: PT1H30M)과 초 단위를 상호 변환합니다. YouTube API, AWS 타임아웃 설정, 팟캐스트 RSS 피드 등에서 사용되는 기간 형식을 해독하고 생성할 수 있는 개발자용 도구입니다.
ISO 8601 기간 표기법의 대표 예시
ISO 8601 기간은 "P"로 시작해 년·월·일이 이어지고, 이어서 "T" 다음에 시·분·초가 나오는 형식입니다. 아래는 대표적인 표기와 이에 해당하는 초 값입니다.
| 표기법 | 총 초 | 비고 |
|---|---|---|
| PT30S | 30 | 30초 타임아웃 등 짧은 시간 지정의 대표 예시 |
| PT1H30M | 5,400 | 1시간 30분. 영화 상영 시간이나 YouTube 동영상 길이를 나타낼 때 자주 사용되는 형식 |
| P1D | 86,400 | 1일(24시간). 서버 로그 보존 기간이나 캐시 유효기간 지정에 사용됨 |
| P3Y6M4DT12H30M5S | 110,842,205 | 3년 6개월 4일 12시간 30분 5초에 해당하는 복합 표기 예시(년·월은 연 365.25일 근사값으로 환산) |
사용 팁
- 년·월을 포함하는 기간은 실제로는 달력에 따라 일수가 달라지므로, 이 도구에서는 1년=365.25일, 1개월=30.44일이라는 고정 근사값으로 초를 환산합니다.
- 초에서 기간 문자열을 생성할 때 "일/시/분/초만" 모드를 선택하면 년·월 근사값을 전혀 사용하지 않고 윤년 등의 오차가 없는 정확한 표기를 얻을 수 있습니다.
- YouTube Data API의 동영상 정보(contentDetails.duration)는 ISO 8601 형식으로 반환되므로, 이 도구에 그대로 붙여넣어 초 단위로 변환할 수 있습니다.
- AWS Lambda나 API Gateway 같은 클라우드 서비스의 타임아웃 설정에 ISO 8601 기간 표기법이 사용되는 경우가 있어, 설정값 검증에 유용합니다.
- 팟캐스트 RSS 피드에서 오디오 길이를 나타낼 때 hh:mm:ss 형식 외에 ISO 8601 기간 형식이 사용되기도 합니다.
자주 묻는 질문
여담 ― 컴퓨터 세계에 "기간"을 나타내는 전용 형식이 있는 이유
ISO 8601은 날짜와 시각을 국제적으로 통일된 형식으로 나타내는 규격으로 잘 알려져 있지만, 사실 "기간(Duration)", 즉 두 시점 사이의 길이를 나타내는 표기법도 같은 규격 안에 정의되어 있습니다. 날짜와 시각이 "언제인가"라는 한 지점을 가리키는 반면, 기간은 "얼마나 긴가"라는 차이 정보이며, 둘은 비슷해 보이지만 다뤄야 할 정보의 성질이 전혀 다릅니다. 이 차이를 명확히 하기 위해 "P"로 시작하는 전용 표기법이 마련되었습니다.
기간 표기법이 실무에서 중요하게 쓰이는 이유 중 하나는 프로그램 간 데이터를 주고받을 때 단위 해석 차이로 인한 버그를 막을 수 있다는 점입니다. 예를 들어 API 응답에 "30"이라는 숫자만 포함되어 있다면, 이것이 초인지 분인지는 호출하는 쪽이 별도로 문서를 확인하지 않는 한 알 수 없습니다. 반면 "PT30S"라면 값과 단위가 하나의 문자열에 함께 포함되어 있으므로, 파싱하는 쪽 구현이 올바르다면 해석을 잘못할 여지가 없습니다.
YouTube Data API가 동영상 길이를 ISO 8601 형식으로 반환하는 것도 같은 이유입니다. "PT4M13S"라는 문자열을 보면 이것이 4분 13초짜리 동영상임을 명확히 알 수 있습니다. 마찬가지로 AWS나 Google Cloud의 API에서도 타임아웃이나 유효기간 설정에 이 형식이 채택되는 경우가 있으며, 클라우드 서비스의 YAML 설정 파일이나 JSON 응답에서 이 표기법을 발견했다면 이 도구로 초 단위로 변환해 구체적인 길이를 확인해 보면 감을 잡기 쉬워집니다.
한편 이 규격에는 년·월을 포함하는 기간이 "절대적인 길이"를 갖지 않는다는 흥미로운 특성이 있습니다. 같은 "P1Y"라도 윤년을 넘기는지 여부에 따라 실제 일수가 365일이 되기도 366일이 되기도 합니다. 이 도구가 년월을 포함한 변환에서 근사값을 사용할 수밖에 없는 것도, 근본적으로는 이 규격상의 모호함에서 비롯된 것입니다.