유닉스 시간

Unix time
현재 유닉스 시간
1695968618(업데이트)
2023-09-29T06:23:38+00:00
2001-09-09에 Unix 시간이 1000000000초를 넘겼습니다.T01:46:40Z.[1]덴마크 코펜하겐에서 덴마크 UNIX 사용자 그룹이 현지 시간 03:46:40에 개최한 파티에서 축하했습니다.

유닉스 시간[a] 컴퓨팅에서 널리 사용되는 날짜와 시간 표현입니다.윤초로 인한 조정 없이 유닉스 시대인 1970년 1월 1일 00:00:00 UTC 이후 경과한 초수로 시간을 측정합니다.현대 컴퓨팅에서는 마이크로초나 나노초같이 값이 더 세분화되어 저장되기도 합니다.

유닉스 시간은 유닉스 운영 체제의 시스템 시간으로 시작되었습니다.그것은 다른 컴퓨터 운영 체제, 파일 시스템, 프로그래밍 언어, 데이터베이스에서 널리 사용되게 되었습니다.

정의.

유닉스 시간은 현재 1970년 1월 1일 목요일 UTC 00:00:00 이후로 경과한 비약이 아닌 초의 수로 정의되며, 이를 유닉스 시대라고 합니다.[3]유닉스 시간은 일반적으로 부호화된 정수로 인코딩됩니다.

유닉스 시간 0은 1970년 1월 1일 UTC로 정확히 자정이며, 유닉스 시간은 이후 매 초마다 1씩 증가합니다.예를 들어 1971년 1월 1일 00:00:00 UTC는 Unix 시간으로 31536000으로 표시됩니다.이를 지원하는 시스템에서 음의 값은 유닉스 시대 이전의 시간을 나타냅니다. 그 값은 시대 이전의 1초마다 1씩 감소합니다.예를 들어 1969년 1월 1일 00:00:00 UTC는 Unix 시간으로 -31536000으로 표시됩니다.유닉스에서 매일의 시간은 정확히 86400초로 구성됩니다.

유닉스 시간을 에포크 시간이라고 부르기도 합니다.유닉스 시간은 한 시대에 기반을 둔 유일한 시간 체계가 아니며 유닉스 시대는 다른 시간 체계에서 사용되는 유일한 시대가 아니기 때문에 이는 오해의 소지가 있습니다.[5]

윤초

유닉스 시간은 윤초 처리에 있어서 UTC(Coordinated Universal Time)와 TAI(International Atomic Time) 모두와 다릅니다.UTC는 태양과 관련된 지구의 위치와 관련된 정확한 시간과 태양 시간 사이의 불일치를 조정하는 윤초를 포함합니다.하루가 정확히 86400초국제원자력시간(TAI)은 태양시간을 무시하고 1년에 약 1초의 속도로 지구의 자전과 동기를 점차 상실합니다.유닉스 시간에서 매일은 정확히 86400초를 포함합니다.각 도약 초는 그 바로 앞이나 뒤에 오는 초의 타임스탬프를 사용합니다.[3]

UTC가 86400초인 일반적인 날에는 Unix 시간 번호가 자정에 걸쳐 연속적으로 변경됩니다.예를 들어, 위의 예에서 사용된 하루의 끝에서 시간 표현은 다음과 같이 진행됩니다.

자정부터 2004년 9월 17일까지의 Unix 시간(약 2초 없음)
TAI (2004년 9월 17일) UTC (2004년 9월 16일 ~ 9월 17일 유닉스 시간
2004-09-17T00:00:30.75 2004-09-16T23:59:58.75 1095379198.75
2004-09-17T00:00:31.00 2004-09-16T23:59:59.00 1095379199.00
2004-09-17T00:00:31.25 2004-09-16T23:59:59.25 1095379199.25
2004-09-17T00:00:31.50 2004-09-16T23:59:59.50 1095379199.50
2004-09-17T00:00:31.75 2004-09-16T23:59:59.75 1095379199.75
2004-09-17T00:00:32.00 2004-09-17T00:00:00.00 1095379200.00
2004-09-17T00:00:32.25 2004-09-17T00:00:00.25 1095379200.25
2004-09-17T00:00:32.50 2004-09-17T00:00:00.50 1095379200.50
2004-09-17T00:00:32.75 2004-09-17T00:00:00.75 1095379200.75
2004-09-17T00:00:33.00 2004-09-17T00:00:01.00 1095379201.00
2004-09-17T00:00:33.25 2004-09-17T00:00:01.25 1095379201.25

윤초가 발생하면 UTC 일의 길이는 정확히 86400초가 아니며 Unix 시간 번호(항상 매일 정확히 86400씩 증가)는 불연속적입니다.윤초는 양일 수도 있고 음일 수도 있습니다.음의 윤초가 선언된 적은 없지만 음의 윤초가 있는 날의 마지막 날에 유닉스 시간 번호가 다음 날의 시작으로 1만큼 뛰어오를 것입니다.평균적으로 약 1년 반마다 발생하는 하루의 끝에서 양의 윤초 동안, 유닉스 시간 수는 윤초 동안 다음 날까지 계속 증가하고 윤초가 끝날 때 다시 1만큼 점프합니다(다음 날의 시작으로 돌아갑니다).예를 들어, 1998년 말에 엄격하게 준수하는 POSIX.1 시스템에서 일어난 일은 다음과 같습니다.

자정을 넘어 1999년 1월 1일까지 유닉스 시간 (긍정적 도약 초)
TAI (1999년 1월 1일) UTC (1998년 12월 31일 ~ 1999년 1월 1일) 유닉스 시간
1999-01-01T00:00:29.75 1998-12-31T23:59:58.75 915148798.75
1999-01-01T00:00:30.00 1998-12-31T23:59:59.00 915148799.00
1999-01-01T00:00:30.25 1998-12-31T23:59:59.25 915148799.25
1999-01-01T00:00:30.50 1998-12-31T23:59:59.50 915148799.50
1999-01-01T00:00:30.75 1998-12-31T23:59:59.75 915148799.75
1999-01-01T00:00:31.00 1998-12-31T23:59:60.00 915148800.00
1999-01-01T00:00:31.25 1998-12-31T23:59:60.25 915148800.25
1999-01-01T00:00:31.50 1998-12-31T23:59:60.50 915148800.50
1999-01-01T00:00:31.75 1998-12-31T23:59:60.75 915148800.75
1999-01-01T00:00:32.00 1999-01-01T00:00:00.00 915148800.00
1999-01-01T00:00:32.25 1999-01-01T00:00:00.25 915148800.25
1999-01-01T00:00:32.50 1999-01-01T00:00:00.50 915148800.50
1999-01-01T00:00:32.75 1999-01-01T00:00:00.75 915148800.75
1999-01-01T00:00:33.00 1999-01-01T00:00:01.00 915148801.00
1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 915148801.25

유닉스 시간 번호는 양의 도약 초 직후 초 단위로 반복됩니다.유닉스 시간 번호 1483142400은 따라서 애매합니다. 윤초의 시작(2016-12-31 23:59:60) 또는 한 초 후의 종료(2017-01-01 00:00:00)를 참조할 수 있습니다.음의 윤초가 발생할 때 이론적인 경우에는 모호함이 발생하지 않지만 대신 UTC 시간의 어떤 지점도 전혀 참조하지 않는 범위의 유닉스 시간 번호가 있습니다.

유닉스 클럭은 종종 NTP(Network Time Protocol)와 관련된 다른 유형의 긍정적 도약 초 처리로 구현됩니다.이로 인해 POSIX 표준을 준수하지 않는 시스템이 생성됩니다.자세한 내용은 NTP에 관한 아래 절을 참조하십시오.

UTC 윤초를 포함하지 않는 기간을 다룰 때 두 Unix 시간 번호 간의 차이는 해당 시점 간의 기간(초)과 동일합니다.이것은 일반적인 계산 기법입니다.그러나 윤초가 발생하는 경우 이러한 계산은 잘못된 답을 제공합니다.이러한 수준의 정확도가 요구되는 응용 프로그램에서는 유닉스 시간을 처리할 때 도약 초의 표를 참조해야 하며, 이러한 문제를 겪지 않는 다른 시간 인코딩을 사용하는 것이 좋습니다.

유닉스 시간 번호는 유닉스 시간 번호인 modulo 86400의 몫과 모듈러스를 취함으로써 UTC 시간으로 쉽게 다시 변환됩니다.몫은 에포크 이후의 일수이고, 모듈러스는 그 날 자정 UTC 이후의 초수입니다.양의 윤초로 인해 애매모호한 유닉스 시간 번호가 주어진 경우, 이 알고리즘은 자정 직후의 시간으로 해석합니다.윤초 동안에는 절대 시간이 발생하지 않습니다.음의 윤초로 인해 유효하지 않은 Unix 시간 번호가 지정된 경우 동일하게 유효하지 않은 UTC 시간이 생성됩니다.이러한 조건이 중요한 경우에는 윤초 표를 참조하여 이러한 조건을 탐지해야 합니다.

IMT2000 3GPP - 비동기 네트워크 시간 프로토콜 기반 변형

일반적으로 밀스 스타일의 유닉스 시계는 유닉스 시간 번호의 변경과 동기화되지 않는 윤초 처리로 구현됩니다.시간 번호는 처음에 도약이 발생했어야 할 곳에서 감소한 다음, 도약 후 1초 후에 정확한 시간으로 도약합니다.이를 통해 구현이 더욱 쉬워지며, Mills의 논문에서 이에 대해 설명합니다.[6]긍정적인 도약 초를 가로질러 일어나는 일입니다.

비동기 Mills 스타일 유닉스 클럭
자정을 넘어 1999년 1월 1일까지 (긍정 도약 초)
TAI (1999년 1월 1일) UTC (1998년 12월 31일 ~ 1999년 1월 1일) 유닉스 시계
1999-01-01T00:00:29.75 1998-12-31T23:59:58.75 TIME_INS 915148798.75
1999-01-01T00:00:30.00 1998-12-31T23:59:59.00 TIME_INS 915148799.00
1999-01-01T00:00:30.25 1998-12-31T23:59:59.25 TIME_INS 915148799.25
1999-01-01T00:00:30.50 1998-12-31T23:59:59.50 TIME_INS 915148799.50
1999-01-01T00:00:30.75 1998-12-31T23:59:59.75 TIME_INS 915148799.75
1999-01-01T00:00:31.00 1998-12-31T23:59:60.00 TIME_INS 915148800.00
1999-01-01T00:00:31.25 1998-12-31T23:59:60.25 TIME_OOP 915148799.25
1999-01-01T00:00:31.50 1998-12-31T23:59:60.50 TIME_OOP 915148799.50
1999-01-01T00:00:31.75 1998-12-31T23:59:60.75 TIME_OOP 915148799.75
1999-01-01T00:00:32.00 1999-01-01T00:00:00.00 TIME_OOP 915148800.00
1999-01-01T00:00:32.25 1999-01-01T00:00:00.25 TIME_WAIT 915148800.25
1999-01-01T00:00:32.50 1999-01-01T00:00:00.50 TIME_WAIT 915148800.50
1999-01-01T00:00:32.75 1999-01-01T00:00:00.75 TIME_WAIT 915148800.75
1999-01-01T00:00:33.00 1999-01-01T00:00:01.00 TIME_WAIT 915148801.00
1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 TIME_WAIT 915148801.25

이는 도약이 아직 수행되었는지 여부를 명확하게 나타내는 도약 제2 상태 변수에 주목하여 적절히 디코딩할 수 있습니다.상태 변수 변경은 도약과 동기화됩니다.

음의 윤초에서도 유사한 상황이 발생하는데, 이는 건너뛴 초가 약간 늦습니다.아주 간단하게 시스템에 명목상 불가능한 시간 번호가 표시되지만 TIME_DEL 상태로 감지하여 수정할 수 있습니다.

이러한 유형의 시스템에서 유닉스 시간 번호는 두 종류의 도약 초를 중심으로 POSIX를 위반합니다.시간 번호와 함께 윤초 상태 변수를 수집하면 모호하지 않은 디코딩이 가능하므로 원하는 경우 올바른 POSIX 시간 번호를 생성하거나 전체 UTC 시간을 보다 적합한 형식으로 저장할 수 있습니다.

이러한 스타일의 유닉스 클럭을 처리하는 데 필요한 디코딩 로직은 가상의 POSIX 호환 클럭도 동일한 인터페이스를 사용하여 정확하게 디코딩합니다.이것은 삽입된 윤초의 전체 동안 TIME_INS 상태를 표시한 다음 초 카운트를 반복하면서 다음 초의 전체 동안 TIME_WAIT를 표시함으로써 달성됩니다.이를 위해서는 동시 도약 초 처리가 필요합니다.이 방법은 기본 클럭이 윤초에 의해 근본적으로 문제가 없을 때 유닉스 인터페이스를 통해 UTC 시간을 유닉스 클럭 형태로 표현하는 가장 좋은 방법일 것입니다.

윤초를 계산하는 변형

유닉스 타임 키핑의 또 다른 훨씬 더 희귀하고 부적합한 변형은 도약 초를 포함한 모든 초에 대한 값을 증가시키는 것입니다.[7] 일부 리눅스 시스템은 이러한 방식으로 구성되어 있습니다.[8]이러한 방식으로 유지되는 시간은 때때로 "TAI"로 불리기도 하며, (값이 TAI와 UTC의 차이를 알 수 있는 시간에 해당하는 경우 시간 스탬프가 UTC로 변환될 수 있음에도 불구하고) "UTC"와는 반대입니다 (윤초를 세지 않는 시스템에서는 모든 UTC 시간 값이 고유한 참조를 가지는 것은 아님).[8]

TAI에는 도약초가 없고, 매일 TAI의 길이가 정확히 86400초이기 때문에, 이 인코딩은 실제로 1970-01-01T00:00:10 TAI 이후 경과된 초 단위의 순수 선형 카운트입니다.이렇게 하면 시간 간격 연산이 훨씬 쉬워집니다.이러한 시스템의 시간 값은 엄격하게 준수하는 POSIX 시스템 또는 NTP 기반 시스템이 가지고 있는 모호성을 겪지 않습니다.

이러한 시스템에서 UTC와 의사 유니크 시간 표현 사이를 정확하게 변환하려면 윤초 표를 참조해야 합니다.이는 표준 시간대 표를 참조하여 시민 시간으로 변환하거나 변환해야 하는 방식과 유사합니다. IANA 표준 시간대 데이터베이스에는 도약초 정보가 포함되어 있으며, 동일한 소스에서 사용 가능한 샘플 코드는 해당 정보를 사용하여 TAI 기반 타임 스탬프와 현지 시간 사이에서 변환합니다.전환은 또한 1972년 현재 형태의 UTC가 시작되기 전에 정의 문제에 직면합니다(아래 섹션 UTC 기준 참조).

이 시스템은 겉보기에는 유사하지만 유닉스 시대가 아닙니다.POSIX 시간 값과 몇 초 차이가 나는 값으로 시간을 인코딩합니다.1970-01-01T00:00:10 TAI가 아닌 1970-01-01T00:00 TAI인 이 시스템의 버전이 ISO C에 포함되도록 제안되었으나 2011년 UTC 부분만 승인되었습니다.[9] Atai_clock그러나 C++20에는 존재합니다.

숫자를 나타냄

유닉스 시간 번호는 숫자를 나타낼 수 있는 모든 형태로 나타낼 수 있습니다.일부 응용 프로그램에서 숫자는 단순히 텍스트로 십진 숫자의 문자열로 표현되며, 사소한 추가 문제만 발생합니다.그러나 유닉스 시간의 특정 이진법 표현은 특히 중요합니다.

유닉스time_t특정 시점을 나타내는 데이터 유형은 많은 플랫폼에서 부호화된 정수로, 일반적으로 32비트(아래 참조)이며 앞 절에서 설명한 대로 유닉스 시간 번호를 직접 인코딩합니다.서명된 32비트 값은 1970-01-01 시대 전후의 약 68년을 포함합니다.최소 대표 날짜는 1901-12-13일 금요일이고, 최대 대표 날짜는 2038-01-19일 화요일입니다.UTC 2038-01-19 03:14:07 UTC 2038-01-19 이후 1초 후에 이 표현은 2038년 문제로 알려져 있는 것으로 오버플로됩니다.

일부 최신 운영 체제에서는time_t64비트로 확장되었습니다.이는 우주의 현재 나이의 20배가 넘는 약 2920억 년의 시간을 양방향으로 확장하는 것입니다.

원래는 유닉스가 다음과 같은 것인지에 대해 논란이 있었습니다.time_t서명하거나 서명하지 않아야 합니다.서명되지 않은 경우 향후 범위가 두 배가 되어 32비트 오버플로(68년)가 지연됩니다.하지만 그러면 시대 이전의 시대를 표현할 수 없게 됩니다.의견 일치는 다음과 같습니다.time_t서명을 받아야 하고, 이것이 통상적인 관례입니다.QNX 운영 체제 버전 6의 소프트웨어 개발 플랫폼에는 서명되지 않은 32비트가 있습니다.time_t, 비록 오래된 릴리스들은 서명된 형식을 사용했습니다.

POSIXOpen Group Unix 사양에는 헤더 파일에 정의된 시간 유형 및 함수가 포함된 C 표준 라이브러리가 포함되어 있습니다.ISO C 표준에는 다음과 같이 명시되어 있습니다.time_t산술 형식이어야 하지만 특정 형식이나 인코딩을 요구하지는 않습니다.POSIX 필요time_t정수 형식이지만 서명 또는 비서명을 요구하지는 않습니다.

유닉스는 정수가 아닌 유닉스 시간 수를 이진 분수로 직접 표현하는 전통이 없습니다.대신, 초 단위 정밀도가 있는 시간은 두 개의 정수로 구성된 복합 데이터 유형을 사용하여 표시됩니다. 첫 번째 시간은 다음과 같습니다.time_t(유닉스 시간의 필수적인 부분), 그리고 두 번째는 시간 수(밀리언 분의 1)의 부분입니다.struct timeval) 또는 10억분의 1(in)struct timespec이러한 [10][11]구조는 십진법 기반의 고정 소수점 데이터 형식을 제공하므로 일부 응용 프로그램에서는 유용하고 다른 응용 프로그램에서는 변환하기에 사소한 형식입니다.

UTC기준

UTC의 현재 형태는 윤초로 1972년 1월 1일부터 시작됩니다.그 이전에는 1961년 1월 1일부터 UTC는 정수가 아닌 초 단위로 가끔 시간이 걸렸을 뿐만 아니라, UTC 초 단위가 SI 초 단위보다 약간 더 길었고, 지구의 자전에 근접하도록 주기적으로 변화했습니다.1961년 이전에는 UTC가 없었고 1958년 이전에는 광범위한 원자 시간 기록이 존재하지 않았습니다. 이 시대에는 원자 시간 척도 대신 GMT(지구 자전에 직접 기반한)의 근사치가 사용되었습니다.[citation needed]

UTC의 인코딩으로서 유닉스 시간의 정확한 정의는 UTC의 현재 형태에 적용될 때 논란의 여지가 없습니다.1970년 1월 1일(유닉스 시대)부터 1972년 1월 1일(유닉스 시대 시작)까지의 일수는 문제가 되지 않으며, 유닉스 시대에 중요한 것은 그 일수가 전부입니다.

+63072000(즉, 1972년 1월 1일 이전) 이하의 유닉스 시간 값의 의미는 정확하게 정의되지 않습니다.이러한 유닉스 시간의 기초는 UTC의 불특정 근사치로 가장 잘 이해됩니다.그 시대의 컴퓨터들은 어떤 경우에도 의미 있는 초 단위 타임스탬프를 제공할 수 있을 만큼 충분히 정확하게 시계가 설정된 경우는 거의 없었습니다.유닉스 시간은 초 단위의 정밀도가 필요한 응용 프로그램에서 1972년 이전의 시간을 나타내는 데 적합한 방법이 아닙니다. 그러한 응용 프로그램은 적어도 UT 또는 GMT의 어떤 형태를 사용하는지 정의해야 합니다.

2009년을 기점으로 민간 시간에서의 윤초 사용 종료 가능성이 검토되고 있습니다.[12]이 변경을 실행할 수 있는 가능한 수단은 국제 시간이라는[citation needed] 새로운 시간 척도를 정의하는 것입니다. 이 시간 척도는 처음에는 UTC와 일치하지만 이후에는 도약 초가 없으므로 TAI와 일정한 오프셋을 유지합니다.이렇게 되면 UTC가 아닌 UNIX 시간이 새로운 시간 척도로 정의될 가능성이 높습니다.이러한 현상이 발생할지 여부에 대한 불확실성은 미래의 유닉스 시간을 이미 예측할 수 있는 수준으로 만듭니다. UTC가 더 이상 도약 초가 없다면 결과는 동일할 것입니다.

역사

초기 버전의 유닉스 시간은 32비트 정수가 60Hz의 속도로 증가했습니다. 이것은 초기 유닉스 시스템의 하드웨어에서 시스템 클럭의 속도였습니다.이러한 방식으로 저장된 타임스탬프는 2년 6개월이 조금 넘는 범위만 나타낼 수 있습니다.에포크는 오버플로를 방지하기 위해 유닉스 릴리스와 함께 변경되었으며 1971년 1월 1일 자정과 1972년 1월 1일 자정 모두 유닉스의 초기 개발 기간 동안 에포크로 사용되었습니다.유닉스 시간의 초기 정의에는 시간대가 부족했습니다.[13][14]

현재 시대인 1970년 1월 1일 00:00:00 UTC는 작업하기 편리한 날짜로 여겨져 유닉스 엔지니어들이 임의로 선택했습니다.단기적인 오버플로우를 방지하기 위해 초 단위로 카운트할 수 있도록 정밀도를 변경했습니다.[1]

POSIX.1이 작성되었을 때, 정확하게 정의하는 방법에 대한 문제가 발생했습니다.time_t윤초를 맞이하여POSIX 위원회는 유닉스 시간이 의도한 대로 시민 시간과의 변환에서 복잡성을 희생하여 그 시대 이후의 선형 초수를 유지해야 하는지 또는 윤초를 중심으로 한 불일치를 희생하여 시민 시간을 표현해야 하는지를 고려했습니다.그 시대의 컴퓨터 시계는 어떻게 해서든 선례를 만들기에 충분히 정확하게 설정되어 있지 않았습니다.

POSIX 위원회는 라이브러리 함수의 복잡성에 반대하는 주장에 휘둘렸고,[citation needed] UTC 시간의 요소 측면에서 유닉스 시간을 단순한 방식으로 확고하게 정의했습니다.이 정의는 매우 간단해서 그레고리력의 윤년 규칙 전체를 아우르지도 못했고, 2100년을 윤년으로 만들 것입니다.

2001년판 POSIX.1은 유닉스 시간의 정의에서 잘못된 윤년 규칙을 수정했지만 유닉스 시간의 본질적인 정의는 선형 시간 척도가 아닌 UTC의 인코딩으로 유지했습니다.1990년대 중반부터 컴퓨터 시계는 일상적으로 이것이 중요하기에 충분한 정밀도를 가지고 설정되어 왔으며, 가장 일반적으로 UTC 기반의 유닉스 시간 정의를 사용하여 설정되어 왔습니다.이로 인해 유닉스 구현이 상당히 복잡해졌고, 네트워크 시간 프로토콜에서는 윤초가 발생할 때마다 유닉스 시간 번호의 단계를 실행할 수 있게 되었습니다.[citation needed]

사용.

유닉스 시간은 유닉스의 시스템 시간으로서 원래의 응용 프로그램을 넘어 컴퓨팅에 널리 채택되고 있습니다.Unix 시간은 Unix 기반 운영 체제와 Unix가 아닌 운영 체제에서 제공되는 것을 포함하여 거의 모든 시스템 프로그래밍 API에서 사용할 수 있습니다.거의 모든 현대의 프로그래밍 언어는 유닉스 시간으로 작업하거나 다른 데이터 구조로 변환하기 위한 API를 제공합니다.유닉스 시간은 타임스탬프를 여러 파일 시스템, 파일 형식데이터베이스에 저장하는 메커니즘으로도 사용됩니다.

C 표준 라이브러리는 모든 날짜 및 시간 함수에 대해 유닉스 시간을 사용하며, 유닉스 시간은 CC++에서 타임스탬프에 사용되는 데이터 유형의 이름인 time_t로 불리기도 합니다.C의 유닉스 시간 함수는 POSIX 사양에서 시스템 시간 API로 정의됩니다.[15]C 표준 라이브러리는 macOS리눅스와 같은 유닉스 계열 시스템과 마이크로소프트 윈도우를 포함한 모든 최신 데스크톱 운영 체제에서 광범위하게 사용되며, 여기서 표준 프로그래밍 인터페이스입니다.[16][17][18]

iOS는 2001년 1월 1일의 에포크 사용을 기본으로 하지만 유닉스 타임스탬프와 함께 사용할 수 있는 스위프트 API를 제공합니다.[19]Android는 Unix 시간을 시스템 시간 API의 시간대와 함께 사용합니다.[20]

윈도우는 내부적으로 시간을 저장하는 데 유닉스 시간을 사용하지 않지만 C++에 제공되고 C 표준 라이브러리 사양을 구현하는 시스템 API에 사용합니다.[16]유닉스 시간은 윈도우즈 실행 파일의 PE 형식으로 사용됩니다.[21]

유닉스 시간은 일반적으로 주요 프로그래밍 언어로 제공되며 데스크톱, 모바일 및 웹 애플리케이션 프로그래밍에 널리 사용됩니다.Java는 Unix 타임스탬프를 초 단위와 나노초 단위로 유지하는 Instant 개체를 제공합니다.[22]파이썬은 유닉스 시간을 사용하는 타임 라이브러리를 제공합니다.[23]자바스크립트는 유닉스 시대 이래로 타임스탬프를 밀리초 단위로 제공하고 저장하는 날짜 라이브러리를 제공하며 Node.js와 같은 자바스크립트 서버 환경뿐만 아니라 모든 최신 데스크톱 및 모바일 웹 브라우저에 구현됩니다.[24]

유닉스 기반 운영 체제에서 사용하도록 설계된 파일 시스템은 유닉스 시간을 사용하는 경향이 있습니다.모든 Apple 장치에서 기본적으로 사용되는 파일 시스템인 APFS와 Linux 및 Android 장치에서 널리 사용되는 ext4는 모두 파일 타임스탬프에 Unix 시간을 나노초 단위로 사용합니다.[25][26]RAR, tar 등 여러 아카이브 파일 형식이 유닉스 시간으로 타임스탬프를 저장할 수 있습니다.[27][28]유닉스 시간은 MySQLPostgre를 포함한 데이터베이스에 타임스탬프를 저장하는 데 일반적으로 사용됩니다.SQL 입니다.[29][30]

한계

유닉스 시간은 컴퓨터 내부에서 사용하기 위해 달력 날짜와 시간을 압축적인 방식으로 인코딩하도록 설계되었습니다.사람이 쉽게 읽거나 시간대에 의존하는 값을 저장하기 위한 것이 아닙니다.또한 기본적으로 시간을 초 단위로 나타내도록 제한되어 있으므로 프로그램의 실행 시간을 측정할 때와 같이 보다 정확한 시간 측정이 필요할 때 사용하기에 적합하지 않습니다.[31]

대표 가능 시간 범위

2038년에 발생할 32비트 Unix 시간 오버플로의 애니메이션 비주얼

유닉스 타임 바이 디자인은 스토리지에 대한 특정 크기를 요구하지 않지만, 유닉스 타임의 대부분 일반적인 구현은 기본 컴퓨터의 워드 크기와 함께 부호가 있는 정수를 사용합니다.현대 컴퓨터의 대부분이 32비트 또는 64비트이며 여전히 많은 수의 프로그램이 32비트 호환 모드로 작성되어 있으므로 유닉스 시간을 사용하는 많은 프로그램이 서명된 32비트 정수 필드를 사용하고 있음을 의미합니다.부호가 있는 32비트 정수의 최대값은 2-1이고31 최소값은 -(231)이므로 1901년 12월 13일(UTC 20:45:52) 이전 또는 2038년 1월 19일(UTC 03:14:07) 이후의 날짜를 나타낼 수 없습니다.32비트 Unix 시간이 타임스탬프에 사용되는 일부 데이터베이스에서는 1901년 이전의 날짜를 나타내기 위해 문자열과 같은 다른 형식의 필드에 시간을 저장해야 할 수 있습니다.늦은 컷오프는 2038년 문제로 알려져 있으며, 2038년 컷오프 이후의 날짜가 1901년 대표 범위의 시작으로 되돌아가기 때문에 날짜가 가까워질수록 문제를 일으킬 가능성이 있습니다.[31]: 60

날짜 범위 컷오프는 유닉스 시간 64비트 표현에서는 문제가 되지 않습니다. 서명된 64비트 정수에 저장된 유닉스 시간으로 표시되는 유효 날짜 범위가 5,840억 년 이상이거나 1970년 시대의 어느 방향으로든 2,920억 년 이상이기 때문입니다.[31]: 60-61 [32]

대안

유닉스 시간은 시대를 초월한 시간을 의미하는 유일한 표준이 아닙니다.윈도우에서.FILETIMEtype은 1601년 1월 1일 GMT 0:00 이후 경과한 100나노초 간격의 카운트로 시간을 저장합니다.[33]Windows epoch time은 Active Directory Time Service[35]Server Message Block과 같은 프로토콜과 파일의[34] 타임스탬프를 저장하는 데 사용됩니다.

컴퓨터 간에 시간을 조정하는 데 사용되는 네트워크 시간 프로토콜은 1900년 1월 1일의 에포크를 사용하며, 초 단위로 부호 없는 32비트 정수로 계산되며, 초 단위로32 2초마다(약 136년마다 한 번씩) 롤오버됩니다.[36]

많은 응용 프로그램과 프로그래밍 언어는 명시적인 시간대로 시간을 저장하는 방법을 제공합니다.[37]ISO 8601과 같이 사람과 컴퓨터 모두가 읽을 수 있는 시간 형식 표준도 많이 있습니다.

유닉스 시간대의 주목할 만한 이벤트

유닉스 애호가들은 유닉스 시간 숫자의 중요한 가치를 기념하기 위해 "time_t 파티"(time tea parties)를 개최한 경험이 있습니다.[38][39]이것들은 많은 달력에서 해가 바뀔 때 일어나는 새해 기념행사와 직접적으로 유사합니다.유닉스 시간의 사용이 확산됨에 따라, 그것의 이정표를 기념하는 관행도 증가하고 있습니다.일반적으로 Unix 보기 규칙에 따라 10진수로 표시되는 라운드 숫자인 시간 값입니다.time_t십진법의 값일부 그룹 중에서는 2004년 1월 10일 토요일 13:37:04 UTC에 발생한 +2와30 같은 라운드 이진수도 기념됩니다.[citation needed]

기념하는 이벤트는 일반적으로 "유닉스 에포크 이후 N초"로 설명되지만 이는 부정확합니다. 위에서 논의한 바와 같이, 유닉스 에포크 이후 경과된 시간(초)이 유닉스 에포크 이후 경과된 시간(초)이 에포크 이후의 시간(초)보다 약간 더 길기 때문입니다.

  • 1973년 10월 17일 수요일 18:36:57 UTC에 유닉스 시간(119731017) 내에 ISO 8601 형식[b](1973-10-17)으로 날짜가 처음으로 등장했습니다.
  • 2001년 9월 9일 일요일 01:46:40 UTC에 Unix billennium (Unix 시간번호 1000000000)을 기념했습니다.[40]빌렌니움이라는 이름은 10억천년합성어입니다.[41][42]텍스트 표현을 사용하여 타임스탬프를 저장한 일부 프로그램은 텍스트 정렬에서 시작하는 1자리 이후에 9자리로 시작하는 이전 시간 이전에 잘못 정렬되는 정렬 오류가 발생했습니다.해당 프로그램에는 인기 있는 유즈넷 리더 KNodeKDE 데스크톱 환경의 일부인 이메일 클라이언트 KMail이 포함되었습니다.그러한 버그는 일반적으로 본질적으로 외관상의 것이었고 문제가 명백해지자 빠르게 수정되었습니다.[citation needed]이 문제는 또한 리눅스 버전의 워드퍼펙트와 함께 제공되는 많은 필터(Filtrrix) 문서 형식 필터에도 영향을 주었는데, 코렐은 이 프로그램을 더 이상 판매하거나 지원하지 않았기 때문에 이 문제를 해결하기 위해 사용자 커뮤니티에서 패치를 만들었습니다.[43]
  • 2009년 2월 13일 금요일 23:31:30 UTC에 유닉스 시간의 10진수 표시는 1234567890초에 달했습니다.[44]구글이것을 구글 두들로 기념했습니다.[45]1234567890초를 기념하기 위해 다양한 기술 하위 문화들 중에서 파티들과 다른 기념 행사들이 전세계에서 열렸습니다.[38][46]

대중문화에서

베르너 빙의 소설 '하늘의 깊은 곳'은 수천 년 후 미래의 우주를 여행하는 무역 문명을 묘사하고 있으며, 여전히 유닉스 시대를 사용하고 있습니다.성숙한 컴퓨터 시스템에서 사용 가능한 코드를 찾고 유지하는 데 책임이 있는 "프로그래머-고고학자"는 먼저 이 시대가 인류가 달 위를 처음 걸었던 시기를 가리킨다고 믿지만, 그 후에 이 시대가 인류 최초의 컴퓨터 운영 체제 중 하나인 0초라는 것을 깨닫습니다.[47]

참고 항목

메모들

  1. ^ 유닉스 시간은 "에포치 타임", "포식스 타임",[2][3] "에포치 타임", "유닉스 타임스탬프", "유닉스 에포치 타임"이라고도 합니다.[4]
  2. ^ ISO 8601이 1988년에 발표된 이후 소급하여 인용되었습니다.

참고문헌

  1. ^ a b Farhad, Manjoo (8 September 2001). "Unix Tick Tocks to a Billion". Wired. ISSN 1059-1028. Archived from the original on 11 September 2022. Retrieved 16 October 2022.
  2. ^ "The Open Group Base Specifications Issue 7, Rationale: Base Definitions, section A.4 General Concepts". The Open Group. Archived from the original on 15 November 2017. Retrieved 9 September 2019.
  3. ^ a b c "The Open Group Base Specifications Issue 7, section 4.16 Seconds Since the Epoch". The Open Group. Archived from the original on 22 December 2017. Retrieved 22 January 2017.
  4. ^ Matthew, Neil; Stones, Richard (2008). "The Linux Environment". Beginning Linux Programming. Indianapolis, Indiana, US: Wiley. p. 148. ISBN 978-0-470-14762-7.
  5. ^ "FILETIME structure (minwinbase.h)". Microsoft Docs.
  6. ^ Mills, David L. (12 May 2012). "The NTP Timescale and Leap Seconds". eecis.udel.edu. Archived from the original on 15 May 2012. Retrieved 21 August 2017.
  7. ^ "Precision timekeeping". Sources for time zone and daylight saving time data. Archived from the original on 16 October 2017. Retrieved 30 May 2022. The tz code and data support leap seconds via an optional "right" configuration where a computer's internal time_t integer clock counts every TAI second, as opposed to the default "posix" configuration where the internal clock ignores leap seconds. The two configurations agree for timestamps starting with 1972-01-01 00:00:00 UTC (time_t 63 072 000) and diverge for timestamps starting with time_t 78 796 800, which corresponds to the first leap second 1972-06-30 23:59:60 UTC in the "right" configuration, and to 1972-07-01 00:00:00 UTC in the "posix" configuration.
  8. ^ a b "Time Scales". Network Time Protocol Wiki. 24 July 2019. Archived from the original on 12 January 2020. Retrieved 12 January 2020.
  9. ^ Markus Kuhn. "Modernized API for ISO C". www.cl.cam.ac.uk. Archived from the original on 26 September 2020. Retrieved 31 August 2020.
  10. ^ "timespec". NetBSD Manual Pages. 12 April 2011. Archived from the original on 10 August 2019. Retrieved 5 July 2019.
  11. ^ "time.h(0P)". Linux manual page. Archived from the original on 27 June 2019. Retrieved 5 July 2019.
  12. ^ McCarthy, D. D.; Seidelmann, P. K. (2009). TIME—From Earth Rotation to Atomic Physics. Weinheim: Wiley–VCH Verlag GmbH & Co. KGaA. p. 232. ISBN 978-3-527-40780-4.
  13. ^ Unix Programmer's Manual (PDF) (1st ed.). 3 November 1971. Archived (PDF) from the original on 5 March 2022. Retrieved 28 March 2012. time returns the time since 00:00:00, Jan. 1, 1971, measured in sixtieths of a second.
  14. ^ Unix Programmer's Manual (PDF) (3rd ed.). 15 March 1972. Archived (PDF) from the original on 12 February 2023. Retrieved 11 February 2023. time returns the time since 00:00:00, Jan. 1, 1972, measured in sixtieths of a second...The time is stored in 32 bits. This guarantees a crisis every 2.26 years.
  15. ^ "The Open Group Technical Standard Base Specifications Issue 7 (2018 edition)". IEEE and The Open Group. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  16. ^ a b "time, _time32, _time64". learn.microsoft.net. Microsoft Corporation. 13 February 2023. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  17. ^ "The GNU C Library (glibc)". The GNU Operating Sisyem. Free Software Foundation. Archived from the original on 22 April 2016. Retrieved 1 May 2023. The GNU C Library project provides the core libraries for the GNU system and GNU/Linux systems, as well as many other systems that use Linux as the kernel.
  18. ^ "Mac OS X Manual Page for localtime(3)". Apple Documentation Archive. Apple Inc. Archived from the original on 22 July 2022. Retrieved 1 May 2023.
  19. ^ "NSDate". Apple Developer Documentation. Apple Inc. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  20. ^ "Time Overview". Android Open Source Project. Google LLC. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  21. ^ "PE Format - Win32 apps". learn.microsoft.com. Microsoft Corporation. 24 March 2023. Archived from the original on 29 April 2023. Retrieved 1 May 2023.
  22. ^ "Instant (Java Platform SE 8 )". docs.oracle.com. Oracle. Archived from the original on 25 November 2016. Retrieved 1 May 2023.
  23. ^ "time — Time access and conversions", Python documentation, archived from the original on 22 July 2022, retrieved 25 July 2022
  24. ^ "Date - JavaScript MDN". developer.mozilla.org. Mozilla. Archived from the original on 21 July 2021. Retrieved 1 May 2023.
  25. ^ Apple File System Reference (PDF), p. 57, archived (PDF) from the original on 5 November 2022, retrieved 19 October 2022, This timestamp is represented as the number of nanoseconds since January 1, 1970 at 0:00 UTC, disregarding leap seconds
  26. ^ "Data Structures and Algorithms". The Linux Kernel documentation. Linux Kernel Organization, Inc. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  27. ^ "RAR 5.0 archive format". www.rarlab.com. win.rar GmbH. Archived from the original on 1 May 2023. Retrieved 1 May 2023. Time is stored in Unix time_t format if this flags [sic] is set and in Windows FILETIME format otherwise
  28. ^ "Tape Archive (tar) File Format Family". www.loc.gov. Library of Congress. 7 January 2021. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  29. ^ "Date and Time Functions", MySQL 8.0 Reference Manual, archived from the original on 19 October 2022, retrieved 19 October 2022
  30. ^ "8.5. Date/Time Types". PostgreSQL Documentation. The PostgreSQL Global Development Group. 9 February 2023. Archived from the original on 1 May 2023. Retrieved 1 May 2023.
  31. ^ a b c Rochkind, Mark (2004). Advanced UNIX Programing (2nd ed.). Addison-Wesley. pp. 56–63. ISBN 978-0-13-141154-8.
  32. ^ Saxena, Ashutosh; Rawat, Sanjay. "IDRBT Working Paper No. 9" (PDF). Archived from the original (PDF) on 13 May 2012.
  33. ^ "FILETIME (minwinbase.h) - Win32 apps". Microsoft Learn. Microsoft. 2 April 2021. Archived from the original on 10 March 2023. Retrieved 9 March 2023.
  34. ^ "File Times - Win32 apps". Microsoft Learn. Microsoft. 7 January 2021. Archived from the original on 8 March 2023. Retrieved 9 March 2023.
  35. ^ "How to convert date/time attributes in Active Directory to standard time format". Microsoft Learn. Microsoft. Archived from the original on 20 October 2022. Retrieved 20 October 2022.
  36. ^ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff (2004). UNIX Network Programming. Addison-Wesley Professional. pp. 582–. ISBN 978-0-13-141155-5. Archived from the original on 30 March 2019. Retrieved 16 October 2016.
  37. ^ "datetime — Basic date and time types". Python Standard Library Reference. Python Software Foundation. Archived from the original on 19 October 2022. Retrieved 20 October 2022. Attributes: year, month, day, hour, minute, second, microsecond, and tzinfo.
  38. ^ a b Tweney, Dylan (12 February 2009). "Unix Lovers to Party Like It's 1234567890". Wired. Archived from the original on 29 March 2014. Retrieved 12 March 2017.
  39. ^ "Slashdot date +%s Turning 1111111111". 17 March 2005. Archived from the original on 12 January 2020. Retrieved 12 January 2020.[unre신뢰할 수 있는 출처?]
  40. ^ "Unix time facts & trivia – Unix Time . Info". Archived from the original on 27 October 2017.
  41. ^ "UNIX Approaches Ripe Old Age of One Billion". Electromagnetic.net. Archived from the original on 13 April 2013. Retrieved 6 December 2012.
  42. ^ Neumann, Peter G. (15 October 2001). "The Risks Digest Volume 21: Issue 69". Catless.ncl.ac.uk. Archived from the original on 22 October 2015. Retrieved 6 December 2012.
  43. ^ "Technical Problems". linuxmafia.com. Archived from the original on 11 October 2012. Retrieved 21 August 2017.
  44. ^ nixCraft. "Humor: On Feb, Friday 13, 2009 Unix time Will Be 1234567890". Cyberciti.biz. Retrieved 5 July 2023.
  45. ^ "Google 1234567890 Logo". Google Inc. Archived from the original on 11 January 2013. Retrieved 28 January 2013.
  46. ^ Ahmed, Murad (13 February 2009). "At the third stroke, the Unix time will be 1234567890". The Times. Archived from the original on 14 November 2016. Retrieved 12 January 2020.
  47. ^ Mashey, John R. (27 December 2004). "Languages, Levels, Libraries, and Longevity". Queue. 2 (9): 32–38. doi:10.1145/1039511.1039532. S2CID 28911378. Archived from the original on 10 August 2019. Retrieved 12 January 2020.

외부 링크