ISO 8601
ISO 8601 "Data elements and interchange formats - Information interchange - Representation of dates and times"은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 이 표준은 국제 표준화 기구(ISO)에 의해 공포되었으며 1988년에 처음으로 공개되었다. 이 표준의 목적은 날짜와 시간을 표현함에 있어 명백하고 잘 정의된 방법을 제공함으로써, 날짜와 시간의 숫자 표현에 대한 오해를 줄이고자함에 있는데, 숫자로 된 날짜와 시간 작성에 있어 들간의 데이터가 오갈때 특히 그렇다.
일반적으로, ISO 8601는 그레고리력 (도 가능)에서의 날짜와 (부가적으로 시간대 정보를 포함하는) 24시간제에 기반하는 시간, 그리고 그들의 조합에 대한 표현과 형식에 적용된다. 이 표준은 표현할 날짜/시간 요소에 어떠한 특정 의미도 할당하지 않는다; 그 의미는 사용 맥락에 따라 달라질 것이다. 추가로, 표현될 날짜와 시간은 표준 내에서의 지정된 의미의 숫자(예를 들자면, 이름)가 아니고서는 단어를 포함할 수 없으며 단어들은 문자(예: 이미지, 소리)를 사용하지 않는다.
교환을 위한 표현에서, 날짜와 시간은 재배치되어서, 가장 큰 시간 용어(년도)가 왼쪽에 놓이며 각각의 더 작은 용어들은 이전 용어의 우측에 놓이게 된다. 표현은 아라비아 숫자와 표준 내에서 특정 의미를 제공하는 ("-", ":", "T", "W" 그리고 "Z"와 같은) 어떤 문자들로 작성되어야 한다. 그것이 의미하는 바는, "January" 혹은 "Thursday"처럼 날짜의 일부를 작성하는 어떤 평범한 방법이 교환 표현에서는 허용되지 않는다는 것이다.
ISO 8601 표준의 첫 판은 1988에 "ISO 8601:1988"으로 공개되었다. 이 표준은 날짜 및 시간에 대한 다양한 표기법을 토대로 하는 이전 ISO 표준 (, , ,  그리고 )들을 통합하고 대체하였다. 2000년에 들어 두번째 판인 "ISO 8601:2000"이 자리를 대신하게 됐으며, 현재의 세번째 판인 "ISO 8601:2004"는 2004년 12월 1일에 공개되었다. ISO 8601는 TC 154에 의해 준비되었으며, 위원회의 직접적인 책임 하에 있다.
ISO 2014는, 대체되긴 했지만, 큰 단위부터 작은 단위까지의 중대한 순서인 [YYYY]-[MM]-[DD]의 전체가 숫자로 된 표기법을 처음으로 도입한 표준이다. ISO의 주 넘버링 시스템은 ISO 2015에서 도입되었으며, 년도 내 일자 서수에 의한 일(days) 식별은 ISO 2711에서 처음으로 정의되었다.이 표준은 민간 사용을 위한 국제 표준을 지원하는 그레고리력을 사용한다.
ISO 8601는 레퍼런스 달력 날짜를 파리에서 미터 협약("Convention du Mètre")가 체결된 날짜인 그레고리력 상의 1875년 5월 20일로 고정한다. 하지만, 컨벤션 이전의 ISO 달력 날짜는 여전히 1582년 10월 15일에 공식적으로 도입된 그레고리력과 호환된다. 에서의 초기 날짜는 파트너 교환 정보의 상호 동의로 사용될 수 있다. 이 표준은 모든 날짜가 앞뒤로 연결되어 있으므로, 율리우스력 사용은 표준에 있어 용납되지 않는다(날짜 전환 시, 날짜가 연속되지 않기 때문에).
ISO 8601는 2000년 문제 해결을 위해, 최소한 네 자리 연도 [YYYY]를 규정한다. 그러므로 0000부터 9999까지의 연도를 표현하며, 0000년은 기원전 1년 (BCE)과 동일하며 다른 것들은 기원후 (CE)이다. 하지만, 1583년 이전의 연도들은 자동으로 표준에 맞지는 않다. 대신 [0000]부터 [1582] 까지의 범위 내 값들은 정보 교환 내 파트너들의 상호 동의 하에 사용될 수 있다.
0000년 이전 혹은 9999년 이후의 연도 표현을 위해, 표준은 연도 표현의 확장을 허용지만 송수신자 간의 동의 하에서만 가능하다. 확장된 연도 표현 [±YYYYY]은 최소한의 4자리를 뛰어넘어 여분의 연도 자릿수에 대해 동의된 상태여야 하며, 좀 더 일반적인 AD/BC(혹은 ) 표기법 반드시 + 혹은 - 기호를 앞에 붙여야 한다; 관례에 따르면 기원전 1년는 +0000으로 레이블되고, 기원전 2년는 -0001로 레이블된다.
달력 날짜 표현은 위 박스에서 보여지는 형식 중 하나다. 는 0000부터 9999까지의 4자리 연도를 나타낸다. 은 2자리 숫자로 된 연도 내 달로 01부터 12까지이다. 는 해당 월의 2자리 숫자로 된 날짜를 01부터 31 사이의 숫자로 나타낸다. 예를 들어, "1981년 4월 5일"은, 확장된 형식으로는 "1981-04-05"로, 기본 형식으로는 "19810405"로 표현될 수 있다.
표준은 정확도를 낮춰 작성된 달력 날짜도 허용한다. 한 가지 예로 "1981년 4월"은 "1981-04"가 된다. "--04-05" 작성을 허용한 2000년 버전에서 이는 "4월 5일"을 뜻하지만 2004년 버전에서는 월 표기 시 연도를 생략이 허용되지 않는다. 또 하나는 연도 참조를 위해 간단히 "1981"라고 쓰며 1900부터 1999 사이에서 세기를 참조를 위해 "19"라고 쓰기도 한다. 표준에서 완벽한 달력 날짜 표현을 위해 와 형식 모두를 허용할지라도, 일자인 가 생략되면 형식만 허용된다. 형식 날짜를 허용하지 않기에, 표준은 인 와의 혼선을 막는다(여전히 자주 사용된다).
Week date 표현은 위 박스에서 볼 수 있는 형식 중 하나다. 는 전통적인 그레고리력의 연도와는 살짝 다른 ISO 주수 연도를 가리킨다. 는 문자 W를 접두사로 하는 로, W01부터 W53까지며 월요일이 시작, 일요일이 끝이다.
01 주의 서로 대등하고 공존 가능한 명세가 존재:
그런 결과로, 1월 1일이 월요일, 화요일, 수요일 혹은 목요일에 있다면, 1월 1일은 01 주 내에 포함된다. 1월 1일이 금요일, 토요일 혹은 일요일이라면, 전년도의 52 주 혹은 53 주에 포함된다 (00주는 없다). 12월 28일은 항상 해당 연도의 마지막 주에 포함된다.
주수(week number)는 목요일을 카운트하여 기술 가능하다: 즉, 12 주는 연도의 12번째 목요일이다.
"ISO" "주수 매기기 연도"는 01 주의 첫번째 날(월요일)에서 시작하며 새로운 ISO 연도 전의 일요일에 끝이 난다(그러므로 겹치거나 격차가 나지 않는다). 연도는 꽉찬 52 혹은 53 주로 구성된다. ISO 주수 매기기 연도의 번호는 (ISO 주수 매기기 이전 연도의 끝인) 전통적인 그레고리력 연도 시작점의 금, 토, 일 혹은 토, 일 혹은 그냥 일요일과 (ISO 주수 매기기 다음 연도의 01 주인) 전통적인 그레고리력 연도의 끝점의 월, 화, 수 혹은 월, 화 혹은 그냥 월요일의 전통 그레고리력 연도의 번호로부터 벗어난다. 목요일에 대해, ISO 주수 매기기 연도 번호는 항상 전통적인 그레고리력 연도 번호와 같다.
예:
주와 달 정의의 임의적인 특성이 도움이 되기보다는 장애물이 되는 경우, 예를 들자면 다른 달력에서 날짜들을 날짜를 비교하는 경우, 가 간단하다. 위에서 표현한데로, [YYYY]는 연도를 가리킨다. [DDD]는 해당 연도의 일자를 001부터 365(윤년의 경우 366)까지로 나타낸다. 예를 들면, "1981-04-05"는 "1981-095"다.
이 형식은 날짜 시스템을 필요로 하지만 전체적인 달력 계산 소프트웨어가 꽤나 부담스러운 간단한 하드웨어 시스템에 사용된다. 이 시스템은 때때로 "율리우스일"로써 참조되는데, 이는 천문학의 율리우스일와 혼동을 일으킬 수 있다. 율리우스일은 Julian proleptic calendar의 기원전 4713년 1월 1일 그리니치 정오(혹은 연도 [0000]의 그레고리 proleptic calendar를 사용하는 ISO 날짜 -4713-11-24의 정오)로부터 날짜를 0부터 시작하여 차례대로 세는 것을 말한다.
ISO 8601는 24시간 시계 시스템을 사용한다. "기본 형식"은 [hh][mm][ss]이며 "확장 형식"은 [hh]:[mm]:[ss]다.
그래서 시간은 기본 형식인 "134630"으로 나타낼 수도 있고 확장 형식인 "13:47:30"와 같이 나타낼 수도 있다.
초 혹은 분과 초 모두, 시간을 더욱 더 간결하게 표현하기 위해 (하지만 정확도가 낮다) 기본 혹은 확장 시간에서 생략될 수도 있다: [hh]:[mm], [hh][mm] 그리고 [hh]는 결과적으로 정확도가 줄어든 시간 형식이 된다.
자정은 특별한 경우인데 "00:00" 또는 "24:00" 로도 참조될 수 있다. "00:00" 표기법은 달력 일자의 시작에서 사용되며 좀 더 많이 사용된다. 일자의 마지막에서는 "24:00"를 사용한다. "2007-04-05T24:00"는 "2007-04-06T00:00와 동일한 시점이다 (아래 혼합된 날짜와 시간 표현을 참고하라).
소수가 세 개의 시간 요소 중 어디에든 더해질 수 있다. 하지만, 소수는 표현 상에서 오직 가장 낮은 순위의 시간 요소에 더해질 수 있다. 소수점인 혹은 (2003년 22번째 제네럴 컨퍼런스 CGPM에서 언급된데로 둘 중 우위는 없지만, ISO 8601:2004에 따르면 가 더 우선된다)는 시간 요소와 그것의 소수 사이의 구분자로써 사용될 수 있다. "14시, 30과 0.5분"을 표현하기 위해, 초 단위 표현을 포함하지 말라. "14:30,5", "1430,5", "14:30.5" 혹은 "1430.5"로 표현하라. 소수를 위한 소수점 이하 자릿수에 대한 제한은 없다. 하지만, 소수점 이하 자릿수는 통신 당사자들간의 합의를 필요로 한다.
ISO 8601의 표준 시간대는 (불특정 위치의) 지역 시간(local time), UTC 혹은 UTC의 오프셋으로써 표현된다.
만약 UTC 관계 정보에 시간 표현이 함께 주어지지 않는다면, 시간은 지역 시간으로 간주된다. 동일한 시간대에서 통신 시 지역 시간을 가정하는 것이 안전한 방법일지라도, 서로 다른 시간대 간의 통신에서 지역 시간을 사용하는 경우에는 애매모호할 수 있다. 단일 지리적 시간대 간조차도, 어떤 지역 시간은 해당 지역(region)이 을 준수하는 경우 애매모호해질 수 있다.
시간이 UTC인 경우, 시간 뒤에 빈칸없이 "Z"를 직접 추가해야 한다. "Z"는 오프셋이 0인 UTC를 위한 지역 지정자(zone designator)다. 그러므로 "09:30 UTC"는 "09:30Z" 혹은 "0930Z"로 표현된다. "14:45:15 UTC"는 "14:45:15Z" 혹은 "144515Z"가 될 수 있다.
은 위에서 Z를 붙였던 것과 동일한 방법으로 ±[hh]:[mm], ±[hh][mm], 혹은 ±[hh] 형식의 시간 뒤에 덧붙인다. 그래서 기술 중인 시간이 UTC보다 한 시간 앞선다면 (겨울 동안의 지역의 시간처럼), 지역 지정자(zone designator)는 "+01:00", "+0100" 혹은 간단히 "+01"가 될 수 있다. UTC 너머의 시간을 표현하려면 음수의 오프셋을 사용한다. 예를 들어, 겨울 기간의 뉴욕 시간은 이다. 다른 시간 오프셋을 알아보려면, 을 참고하라. 음수 오프셋을 표현하기 위해, ISO 8601는 하이픈-마이너스 혹은 문자 사용을 지정하고 있다. 만약 상호교환 문자 세트가 제한되어 있거나 마이너스 기호 문자를 가지고 있지 않다면, 하이픈-마이너스가 사용되어야 할 것이다. 는 마이너스 기호를 가지고 있지 않으므로, 하이픈-마이너스 문자 (코드는 십진수 45 혹은 16진수로 2D다)가 사용되어야 한다. 문자 세트가 마이너스 기호를 가지고 있다면, 해당 문자가 사용되어야 한다. Unicode는 마이너스 기호를 가지고 있고, 그것의 문자 코드는 U+2212 (16진수로 2212)다; 호출은 codice_1다. 마이너스 기호 사용은 유사한 표준과 충돌을 일으키므로, ISO 8601 구현은 아마도 하이픈-마이너스와 마이너스 기호 문자 모두를 허용할 것이다.
다음의 모든 시간들은 동일한 순간을 참조한다: "18:30Z", "22:30+04", "1130−0700" 그리고 "15:00−03:30". 문자는 Z 없이는 사용되지 않는다. UTC 시간을 계산하려면 지역시간에서 오프셋만큼을 빼야 한다. 즉  "15:00−03:30"는 15:00−(−03:30)을 해서 18:30 UTC를 얻게 된다.
추가로 특별한 표현인 "Z"를 갖는, 0 오프셋도 수치적으로 말하면 "+00:00", "+0000" 혹은 "+00"으로써 말할 수 있다. 하지만, "−00:00", "−0000" 혹은 "−00"처럼, 음수 기호로 수치적으로 표현하는 것은 허용되지 않는다. 기호 사용 지시 섹션 (표준의 2004년도판의 3.4.2 섹션)에서는 양수 혹은 0 값을 위해 플러스 기호가 사용되고, 음수 값을 위해 마이너스 기호가 사용되어야 한다고 언급하고 있다. ISO 8601의 프로파일과는 다르게, 이 규칙에 있어 대립하고 있는 RFC3339는 "-00"의 사용을 "+00"과 동일한 표시이지만 다른 함축적인 의미로 허용하고 있다.
ISO 8601은 문자 세트가 제한된 경우 하이픈 (-)을 마이너스 (−) 문자로 사용되는 것을 허용한다. 대조적으로, 는 음수 오프셋을 표현하기 위해 하이픈 (-) 기호를 명시적으로 요구하며 마이너스 (−)기호의 사용은 허용하지 않는다.
시간에서의 단일 포인트는 완전한 날짜 표현, 구분 문자 "T" 그리고 유효한 시간 표현을 연결하여 표현하는 것이다(예를 들자면, "2007-04-05T14:30"처럼).
표준 시간대 지정자가 요구된다면, 혼합된 일시를 따른다. 예를 들어, "2007-04-05T14:30Z" 혹은 "2007-04-05T12:30-02:00처럼 말이다.
기본 혹은 확장 형식 모두가 사용될 수 있으나, 날짜와 시간은 동일한 형식을 사용해야만 한다. 날짜 표현은 달력, 주, 혹은 서수(ordinal date)가 되어야 하며, 완전한 표현을 사용해야 한다. 시간은 정확도가 낮도록 지정된 형식을 사용하여 표현되어야 한다. 상호 간의 동의에 의해 'T' 문자를 생략 가능하다.
기간(durations)는 시간 간격의 컴포넌트이며 시간 간격 내에서 시간 사이의 양을 정의한다. 표준에서 정하고 있는대로 시간 간격의 일부로써만 사용되어야 한다. 시간 간격은 다음 섹션에서 논지한다.
기간은 위에서 보이는 것처럼 P[n]Y[n]M[n]DT[n]H[n]M[n]S 혹은 P[n]W 형식으로 표현된다. 이와 같은 표현에서, [n]은 [n] 앞에 오는 각각의 날짜와 시간 요소들에 대한 값들로 대체된다. 0을 앞에 붙이는 것이 필수는 아니지만, 각 요소에 대한 최대 자릿수는 통신 당사자 간의 합의에 따른다. 대문자 P, Y, M, W, D, T, H, M 그리고 S는 각각의 날짜와 시간 요소를 위한 지정자이지만 대체되지는 않는다.
예를 들어, "P3Y6M4DT12H30M5S"는 "3년, 6개월, 4일, 12시간, 30분, 5초"의 기간을 나타낸다.
지정자를 포함하는 날짜와 시간 요소는 날짜, 시간 요소의 값이 0인 경우 생략될 수 있으며 더 낮은 순위의 요소도 더 낮은 정밀도를 위해 생략될 수 있다. 예를 들어, "P23DT23H"와 "P4Y"는 둘 다 허용될 수 있는 기간 표현이다.
모호함을 줄이기 위해, "P1M"은 한 달의 기간이며 "PT1M"은 1분의 기간을 말한다(T는 시간 값 앞에 오는 시간 지정자임을 알아두자). 소수점이 가장 작은 값으로 사용될 수 있어, "P0.5Y"는 반년을 나타낸다. 소수점은 "P0,5Y" 혹은 "P0.5Y"와 같이, 혹은 로 지정될 수 있다. 표준은 아래에서 주지하고 있는 것 외에 "carry over points"을 초과하고 있는 기간 표현에서의 날짜와 시간 값을 금지하지 않는다. 그래서 "PT36H"는 "P1DT12H"와 같은 기간을 나타내는데 사용될 수도 있다. 그러나 "PT36H"는 에서 혹은 으로 전환하는 경우 "P1DT12H"와 같지 않다는 것을 알아둬야 한다.
그 대신에, 혼합된 일시 표현에 기반한 기간 형식은 기본 형식인 PYYYYMMDDThhmmss 혹은 확장 형식 P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss] 중 하나를 통신 당사자 간의 합의에 의해 사용될 수 있다. 예를 들어, 위에서 보았던 첫번째 기간은 "P0003-06-04T12:30:05"가 될 수 있다. 하지만, 각각의 날짜와 시간 값은 그들의 를 초과할 수는 없다(예를 들어, 월은 13의 값, 시간은 25가 될 수 없다).
시간 간격은 두 시점 간의 간격을 잰 시간을 말한다. 시간 간격을 잰 양은 기간으로 표현된다(이전 섹션에서 기술한대로). 두 시점(시작과 끝)은 혼합된 일시 표현 혹은 단순히 날짜 표현으로 표현된다.
시간 간격을 표현하는데는 4가지 방법이 존재한다:
그 중 첫 3개는 보통 사선(좀 더 일반적으로는 "/")인 "간격 지정자"에 의해 구분되는 두 값을 필요로 한다. 이 표준의 4.4.2 섹션은 다음을 주지하고 있다: "어떤 애플리케이션 분야의 경우 구분자를 위해 사선 대신 이중 하이픈이 사용된다." 표준에서 "이중 하이픈"을 정의하고 있지는 않지만, 이전 버전에서는 "2000-2002"와 같은 표기법을 사용했다. 사선 대신 이중 하이픈을 사용하는 것은 컴퓨터 내 포함을 가능하게 한다. 사선은 로 일반적인 운영 체제에서의 파일 이름에서는 허용되지 않는다.
/ 표현에 있어, 끝 값에서 어떤 요소가 빠진 경우, 시간대를 포함하는 시작 값과 동일한 것으로 간주된다. 표준 상에서 이 특징은 시간 간격 표현의 간결함을 위해 허용된다. 예를 들어, 시작과 끝 시간이 지정된 두 시간 짜리 회의 일시는 간단하게 "2007-12-14T13:30/15:30"으로 나타낼 수 있는데, "/15:30"은 (시작에서의 날짜와 동일하게) "/2007-12-14T15:30"을 의미하며, 월 단위 결제 기간의 시작과 끝 날짜를 "2008-02-15/03-14"로 나타낼 수도 있는데 여기서 "/03-14"는 (시작에서의 동일한 년도) "/2008-03-14"를 나타낸다.
시간 간격 표현 시 더 큰 정확도가 요구된다면, 좀 더 많은 시간 요소가 표현 상에 추가될 수 있다. "2007-11-13/15"라는 간격은 2007-11-13 날짜 상의 어떤 시간에서든 시작할 수 있으며 2007-11-15 날짜 상의 어떤 시간에서는 끝날 수 있는데, 그에 반해 "2007-11-13T09:00/15T17:00"은 시작과 끝 시간을 포함하고 있다. 시작과 끝 날짜의 모든 것을 명시적으로 포함하려면, 간격은 "2007-11-13T00:00/15T24:00"처럼 표현되어야 한다.
간격 반복하기는 "4.5 시간 간격 반복" 절에서 명시되고 있다. 이는 간격 표현의 시작에 "R[n]/"을 추가하여 만들어질 수 있는데 , "R"은 그 자체가 의미하는 문자로써 사용되며 [n]은 반복 횟수로 대체된다. [n] 값의 생략은 무한 반복을 의미한다. 간격이 (형식 1번과 2번처럼) 시작을 지정하고 있다면, 간격 반복을 위한 시작이다. 간격이 시작이 아닌 끝(3번 형식처럼)을 지정하고 있다면, 간격 반복의 끝을 말한다. 예를 들어, "2008-03-01T13:00:00Z"을 시작으로 "P1Y2M10DT2H30M" 간격을 5번 반복하려면, "R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M"을 사용한다.
ISO 8601:2000는 (동의에 의해) 날짜와 시간의 앞선 컴포넌트가 생략된 곳에서 끊기를 허용했다. 이는 확실히 2자리 숫자의 연도 사용과 애매모호한 형식 YY-MM-DD와 YYMMDD을 허용한다. 이 규정은 ISO 8601:2004에서 제거되었다.
상에서, (W3C)는 에러율과 소프트웨어 복잡도를 줄이기 위해 제공된 날짜와 시간 형식을 제한하는 표준 프로파일을 정의하기 위해 ISO 8601를 사용한다.
는 과 에서의 사용을 위해 ISO 8601의 프로토콜을 정의한다. 해당 표준은 기원 이전에서의 기간과 날짜를 명시적으로 배제한다. 주 숫자와 서수 일자와 같은 좀 더 복잡한 형식은 허용되지 않는다.
는 ISO 8601가 금한, "-00:00"로 지정되는 0 시간대 오프셋 허용에 있어 구분된다. "+00:00" 혹은 0이 아닌 오프셋을 따르는 것이 오프셋 사용 시 선호됨에도 불구하고, 는 선호되는 시간대를 말하는 것이 아니라는 함축된 의미를 전달하기 위해 "-00:00"을 지향한다. 이러한 "-00:00"을 따르는 관례는 헤더에서의 타임스탬프를 위해 RFC 3339를 사용하는 와 같은, 초기 RFC들로부터 파생되었다. RFC 2822는 타임스탬프 형식의 어떤 부분이든 ISO 8601에 일치한다는 것을 보장하지 않으므로, 충돌없이 이런 관례를 사용함에 있어 자유롭다.
ISO 8601는 여러 가지 명세들에 의해 참조되는데, ISO 8601 옵션의 전체 범주가 항상 사용되는 것은 아니다. 예를 들자면, TV, 디지털 라디오 등을 위한 여러 표준은 시간과 기간에서의 시점 기술을 위해 여러 가지 형식을 사용한다. 오디오 메타 데이터 명세도 ISO 8601의 서브셋을 사용한다. 은 ISO 8601의 또 다른 서브셋을 구성하고 있다.
2006년 현재로, ISO 8601 주간 날짜는 미국의 주요 브랜드 상업 패키징에서 기본 형식으로 채택됐다. 날짜 표기는 특정 브랜드보다는 특정 패키징, 통조림, 혹은 음료를 담는 공정 등에 의존적이다. 형식은 질적 보장을 위해 상당히 유용한데, 그로 인해 공정상의 오류들은 생산 주간까지 쉽게 추적될 수 있고, 생산품들은 리콜을 위해 정확하게 타켓팅될 수 있다.
와 관련된 Wikimedia Commons의 미디어
구현 개요