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 기간 형식이 사용되기도 합니다.

자주 묻는 질문

PT1H30M은 "1시간 30분"을 나타내는 ISO 8601 기간(Duration) 표기법입니다. "P"는 기간의 시작을 나타내는 기호(Period)이고, "T"는 시각 부분(시·분·초)의 시작을 나타내는 기호입니다. "T"가 없으면 "1M"은 "1개월"을, "T" 뒤의 "1M"은 "1분"을 의미한다는 점에 주의해야 합니다.

대표적인 예로 YouTube Data API의 동영상 길이(contentDetails.duration), AWS나 Google Cloud 등 각종 클라우드 서비스의 타임아웃·유효기간 설정, 팟캐스트 RSS 피드(itunes:duration) 등이 있습니다. 프로그래밍 언어 중에는 Java의 Duration/Period 클래스, Python의 isodate 라이브러리 등이 ISO 8601 기간의 분석·생성을 지원합니다.

1년은 윤년 여부에 따라 365일 또는 366일이 되고, 1개월은 달에 따라 28일부터 31일까지 일수가 다르기 때문에 "1년=몇 초"라는 고정값은 본래 존재하지 않습니다. 이 도구에서는 실용적인 기준으로 윤년을 평균화한 365.25일을 1년으로, 그 12분의 1(약 30.44일)을 1개월로 환산합니다. 정확한 기간을 다루고 싶다면 년월을 사용하지 않고 일·시·분·초만으로 표현하는 "정확한 값" 모드 사용을 권장합니다.

네. "P2W"(2주)와 같은 W 표기법도 지원합니다. 다만 ISO 8601 규격상 W 표기법은 년월일이나 시각 부분과 조합할 수 없는 독립된 축약 표기라는 점에 유의하세요.

"P"로 시작하지 않거나, 단위 순서가 년→월→일·시→분→초 순서를 따르지 않거나, 모든 단위가 생략된 빈 기간을 입력한 경우, 이 도구는 변환 불가능으로 판단해 오류 메시지를 표시합니다.
ツールくん

여담 ― 컴퓨터 세계에 "기간"을 나타내는 전용 형식이 있는 이유

ISO 8601은 날짜와 시각을 국제적으로 통일된 형식으로 나타내는 규격으로 잘 알려져 있지만, 사실 "기간(Duration)", 즉 두 시점 사이의 길이를 나타내는 표기법도 같은 규격 안에 정의되어 있습니다. 날짜와 시각이 "언제인가"라는 한 지점을 가리키는 반면, 기간은 "얼마나 긴가"라는 차이 정보이며, 둘은 비슷해 보이지만 다뤄야 할 정보의 성질이 전혀 다릅니다. 이 차이를 명확히 하기 위해 "P"로 시작하는 전용 표기법이 마련되었습니다.

기간 표기법이 실무에서 중요하게 쓰이는 이유 중 하나는 프로그램 간 데이터를 주고받을 때 단위 해석 차이로 인한 버그를 막을 수 있다는 점입니다. 예를 들어 API 응답에 "30"이라는 숫자만 포함되어 있다면, 이것이 초인지 분인지는 호출하는 쪽이 별도로 문서를 확인하지 않는 한 알 수 없습니다. 반면 "PT30S"라면 값과 단위가 하나의 문자열에 함께 포함되어 있으므로, 파싱하는 쪽 구현이 올바르다면 해석을 잘못할 여지가 없습니다.

YouTube Data API가 동영상 길이를 ISO 8601 형식으로 반환하는 것도 같은 이유입니다. "PT4M13S"라는 문자열을 보면 이것이 4분 13초짜리 동영상임을 명확히 알 수 있습니다. 마찬가지로 AWS나 Google Cloud의 API에서도 타임아웃이나 유효기간 설정에 이 형식이 채택되는 경우가 있으며, 클라우드 서비스의 YAML 설정 파일이나 JSON 응답에서 이 표기법을 발견했다면 이 도구로 초 단위로 변환해 구체적인 길이를 확인해 보면 감을 잡기 쉬워집니다.

한편 이 규격에는 년·월을 포함하는 기간이 "절대적인 길이"를 갖지 않는다는 흥미로운 특성이 있습니다. 같은 "P1Y"라도 윤년을 넘기는지 여부에 따라 실제 일수가 365일이 되기도 366일이 되기도 합니다. 이 도구가 년월을 포함한 변환에서 근사값을 사용할 수밖에 없는 것도, 근본적으로는 이 규격상의 모호함에서 비롯된 것입니다.