ISO 8601

섬네일 **ISO 8601** *Data elements and interchange formats - Information interchange - Representation of dates and times*은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 이 표준은 국제 표준화 기구(ISO)에 의해 공표되었으며 1988년에 처음으로 공개되었다. 이 표준의 목적은 날짜와 시간을 표현함에 있어 명백하고 잘 정의된 방법을 제공함으로써, 날짜와 시간의 숫자 표현에 대한 오해를 줄이고자함에 있는데, 숫자로 된 날짜와 시간 작성에 있어 다른 관례를 가진 나라들간의 데이터가 오갈때 특히 그렇다. 일반적으로, ISO 8601은 그레고리력 (proleptic Gregorian도 가능)에서의 날짜와 (부가적으로 시간대 정보를 포함하는) 24시간제에 기반하는 시간, 시간 간격(time interval) 그리고 그들의 조합에 대한 표현과 형식에 적용된다. 이 표준은 표현할 날짜/시간 요소에 어떠한 특정 의미도 할당하지 않는다; 그 의미는 사용 맥락에 따라 달라질 것이다. 추가로, 표현될 날짜와 시간은 표준 내에서의 지정된 의미의 숫자(예를 들자면, 중국 달력의 년도 이름)가 아니고서는 단어를 포함할 수 없으며 단어들은 문자(예: 이미지, 소리)를 사용하지 않는다. 교환을 위한 표현에서, 날짜와 시간은 재배치되어서, 가장 큰 시간 용어(년도)가 왼쪽에 놓이며 각각의 더 작은 용어들은 이전 용어의 우측에 놓이게 된다. 표현은 아라비아 숫자와 표준 내에서 특정 의미를 제공하는 ("-", ":", "T", "W" 그리고 "Z"와 같은) 어떤 문자들로 작성되어야 한다. 그것이 의미하는 바는, "January" 혹은 "Thursday"처럼 날짜의 일부를 작성하는 어떤 평범한 방법이 교환 표현에서는 허용되지 않는다는 것이다. {| class="wikitable sortable" ! colspan="2" |ISO 8601에 따라 표현된 날짜와 시간 (페이지 생성 시점, 새로고침) |- |날짜: |**2016-10-27** |- |조합된 UTC 날짜 및 시간: |**2016-10-27T17:13:40+00:00 || 2016-10-27T17:13:40Z || 20161027T171340Z** |- |주: |**2016-W43** |- |주 번호가 포함된 날짜: |**2016-W43-4** |- |연도가 없는 날짜: |**--10-27** |- |연중 일자: |**2016-301** |}
# 역사
ISO 8601 표준의 첫 판은 1988에 *ISO 8601:1988*으로 공개되었다. 이 표준은 날짜 및 시간에 대한 다양한 표기법을 토대로 하는 이전 ISO 표준 (ISO 2014, ISO 2015, ISO 2711, ISO 3307 그리고 ISO 4031)들을 통합하고 대체하였다. 2000년에 들어 두번째 판인 *ISO 8601:2000*이 자리를 대신하게 됐으며, 현재의 세번째 판인 *ISO 8601:2004*는 2004년 12월 1일에 공개되었다. ISO 8601는 ISO 기술 위원회 TC 154에 의해 준비되었으며, 위원회의 직접적인 책임 하에 있다. ISO 2014는, 대체되긴 했지만, 큰 단위부터 작은 단위까지의 중대한 순서인 [YYYY]-[MM]-[DD]의 전체가 숫자로 된 표기법을 처음으로 도입한 표준이다. ISO의 주 넘버링 시스템은 ISO 2015에서 도입되었으며, 년도 내 일자 서수에 의한 일(days) 식별은 ISO 2711에서 처음으로 정의되었다.
# 보편적 원칙
* 날짜와 시간 값은 시간 단위의 가장 큰 것부터 가장 작은 것으로 정렬된다: 년도, 월(혹은 주), 일, 시, 분, 초, 그리고 초보다 더 작은 단위. 그러므로 연대순에 대응하는, 표현의 사전식 순서는 음수 년도를 이끄는 날짜 표현은 제외한다. 이것은 날짜가, 예를 들자면 파일 시스템에 의해 자연스럽게 정렬되는 것을 허용한다. * 날짜와 시간은 각각 앞에 0을 붙여서(leading zeros) 유지해야 하는 고정된 자릿수(fixed number of digits)를 갖는다. * 표현은 두 가지 형식 중 한 가지로 이루어질 수 있다. 하나는 최소한의 구분자를 이용한 기본 형식이고 다른 하나는 가독성을 높이기 위해 추가된 구분자를 이용한 확장 형식이다. 표준에서 "평문에서 기본 형식은 피해야 한다"라고 적어놓고 있다. 날짜 값들(년도, 월, 주, 그리고 일) 사이에서 사용되는 구분자는 붙임표인데 반해, 시간 값(시, 분, 그리고 초) 사이에서 사용되는 구분자는 쌍점이다. 예를 들어, 2009년 1월 6일은 확장 형식으로 "2009-01-06"으로 쓰일 수 있으며, 애매모호함 없이 기본 형식에서는 "20090106"으로 간단히 쓰일 수 있다. * 줄어든 정밀도를 위해, 날짜와 시간 표현에서 값들 중 어떤 숫자든지 제외될 수 있으나, 큰 단위가 앞에, 작은 단위가 뒤로 오는 순서는 유지해야 한다. 예를 들어, "2004-05"는 2004년 5월을 가리키는 유효한 ISO 8601 날짜이다. 이 형식은 결코 2004년의 지정되지 않은 달의 5일을 표현하는 것이 아니며 2004년부터 2005년 사이의 기간을 말하는 것이 아니다. * 특정 애플리케이션에서의 필요성으로, 표준에서는 표현 내에서의 가장 작은 단위의 시간 값에 십진수 기반의 분수를 지원하고 있다.
# 날짜
이 표준은 민간 사용을 위한 국제 표준을 지원하는 그레고리력을 사용한다. ISO 8601는 레퍼런스 달력 날짜를 파리에서 미터 협약(*Convention du Mètre*)가 체결된 날짜인 그레고리력 상의 1875년 5월 20일로 고정한다. 하지만, 컨벤션 이전의 ISO 달력 날짜는 여전히 1582년 10월 15일에 공식적으로 도입된 그레고리력과 호환된다. proleptic 그레고리안력에서의 초기 날짜는 파트너 교환 정보의 상호 동의로 사용될 수 있다. 이 표준은 모든 날짜가 앞뒤로 연결되어 있으므로, 율리우스력 사용은 표준에 있어 용납되지 않는다(날짜 전환 시, 날짜가 연속되지 않기 때문에).
## 연도
ISO 8601는 2000년 문제 해결을 위해, 최소한 네 자리 연도 [YYYY]를 규정한다. 그러므로 0000부터 9999까지의 연도를 표현하며, 0000년은 기원전 1년 (BCE)과 동일하며 다른 것들은 기원후 (CE)이다. 하지만, 1583년 이전의 연도들은 자동으로 표준에 맞지는 않다. 대신 [0000]부터 [1582] 까지의 범위 내 값들은 정보 교환 내 파트너들의 상호 동의 하에 사용될 수 있다. 0000년 이전 혹은 9999년 이후의 연도 표현을 위해, 표준은 연도 표현의 확장을 허용지만 송수신자 간의 동의 하에서만 가능하다. 확장된 연도 표현 [±YYYYY]은 최소한의 4자리를 뛰어넘어 여분의 연도 자릿수에 대해 동의된 상태여야 하며, 좀 더 일반적인 AD/BC(혹은 BCE/CE) 표기법 반드시 + 혹은 - 기호를 앞에 붙여야 한다; 관례에 따르면 기원전 1년는 +0000으로 레이블되고, 기원전 2년는 -0001로 레이블된다.
## 달력 날짜
{| |YYYY-MM-DD |또는 |YYYYMMDD |- |YYYY-MM | colspan="2" |(*YYYYMM*는 아님) |- | --MM-DD |또는 | --MMDD |} 달력 날짜 표현은 위 박스에서 보여지는 형식 중 하나다. YYYY는 0000부터 9999까지의 4자리 연도를 나타낸다. MM은 2자리 숫자로 된 연도 내 달로 01부터 12까지이다. DD는 해당 월의 2자리 숫자로 된 날짜를 01부터 31 사이의 숫자로 나타낸다. 예를 들어, "1981년 4월 5일"은, 확장된 형식으로는 "1981-04-05"로, 기본 형식으로는 "19810405"로 표현될 수 있다. 표준은 정확도를 낮춰 작성된 달력 날짜도 허용한다. 한 가지 예로 "1981년 4월"은 "1981-04"가 된다. "--04-05" 작성을 허용한 2000년 버전에서 이는 "4월 5일"을 뜻하지만 2004년 버전에서는 월 표기 시 연도를 생략이 허용되지 않는다. 또 하나는 연도 참조를 위해 간단히 "1981"라고 쓰며 1900부터 1999 사이에서 세기를 참조를 위해 "19"라고 쓰기도 한다. 표준에서 완벽한 달력 날짜 표현을 위해 YYYY-MM-DD와 YYYYMMDD 형식 모두를 허용할지라도, 일자인 DD가 생략되면 YYYY-MM 형식만 허용된다. YYYYMM 형식 날짜를 허용하지 않기에, 표준은 일부를 줄인 표현(truncated representation)인 YYMMDD와의 혼선을 막는다(여전히 자주 사용된다).
## Week Dates
l1=ISO week date {| |YYYY-Www |또는 |YYYYWww |- |YYYY-Www-D |또는 |YYYYWwwD |} Week date 표현은 위 박스에서 볼 수 있는 형식 중 하나다. YYYY는 전통적인 그레고리력의 연도와는 살짝 다른 ISO 주수 연도를 가리킨다. Www는 문자 W를 접두사로 하는 주수로, W01부터 W53까지며 월요일이 시작, 일요일이 끝이다. 01 주의 서로 대등하고 공존 가능한 명세가 존재: * 01 주 내 연도의 첫번째 목요일이 존재 (공식 ISO 정의), * 01 주 내 1월 4일이 존재, * 시작 연도 내 01 주의 일 대부분(4일 이상)을 가진 첫번째 주, 그리고 * 12월 29일부터 1월 4일까지의 기간 내에 있는 월요일로 시작하는 주. 그런 결과로, 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 주수 매기기 연도 번호는 항상 전통적인 그레고리력 연도 번호와 같다. 예: * 2008년 12월 29일 월요일은 "2009-W01-1"로 쓰인다 * 2010년 1월 3일 일요일은 "2009-W53-7"로 쓰인다
## 연중 일자
주와 달 정의의 임의적인 특성이 도움이 되기보다는 장애물이 되는 경우, 예를 들자면 다른 달력에서 날짜들을 날짜를 비교하는 경우, 연중 일자가 간단하다. 위에서 표현한데로, [YYYY]는 연도를 가리킨다. [DDD]는 해당 연도의 일자를 001부터 365(윤년의 경우 366)까지로 나타낸다. 예를 들면, "1981-04-05"는 "1981-095"다. 이 형식은 날짜 시스템을 필요로 하지만 전체적인 달력 계산 소프트웨어가 꽤나 부담스러운 간단한 하드웨어 시스템에 사용된다. 이 시스템은 때때로 "율리우스일"로써 참조되는데, 이는 천문학의 율리우스일와 혼동을 일으킬 수 있다. 율리우스일은 Julian proleptic calendar의 기원전 4713년 1월 1일 그리니치 정오(혹은 연도 [0000]의 그레고리 proleptic calendar를 사용하는 ISO 날짜 -4713-11-24의 정오)로부터 날짜를 0부터 시작하여 차례대로 세는 것을 말한다.
# 시간
{| |hh:mm:ss.sss |또는 |hhmmss.sss |- |hh:mm:ss |또는 |hhmmss |- |hh:mm |또는 |hhmm |- | |hh |} ISO 8601는 24시간 시계 시스템을 사용한다. *기본 형식*은 [hh][mm][ss]이며 *확장 형식*은 [hh]:[mm]:[ss]다. * [hh]는 00부터 24 (24는 달력 일자 끝인 자정을 나타내기 위한 용도로만 사용된다) 사이의 앞에 0이 붙는 시간을 참조한다. * [mm]은 00부터 59 사이의 앞에 0이 붙는 분을 참조한다. * [ss]는 00부터 60 (60은 추가된 윤년초를 나타내기 위한 용도로만 사용된다) 사이의 앞에 0이 붙는 초를 참조한다. 그래서 시간은 기본 형식인 "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"로 표현하라. 소수를 위한 소수점 이하 자릿수에 대한 제한은 없다. 하지만, 소수점 이하 자릿수는 통신 당사자들간의 합의를 필요로 한다.
## 표준 시간대 지정자(time zone designator)
{| class="floatright" |

Z
±hh:mm
±hhmm
±hh

T

PnYnMnDTnHnMnS
PnW
PT